Получить данные из интернет-ссылки в Android - PullRequest
5 голосов
/ 07 июня 2011

Я делаю приложение, которое принимает URL с.* Расширение .asp и мы передаем ему необходимые параметры и получаем какой-либо строковый результат методом POST.

Есть предложения о том, как этого добиться?

ОБНОВЛЕНО:

На самом деле у меня есть ссылка .net, которая принимает некоторые параметры POST и дает мне результат.Как я могу сделать это в Android?

Ответы [ 4 ]

4 голосов
/ 07 июня 2011

HTTPResponse должен выполнить трюк:

DefaultHttpClient  httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoururl.com");

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); <!-- number should be the amount of parameters
nameValuePairs.add(new BasicNameValuePair("nameOfParameter", "parameter"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();

BufferedHttpEntity buf = new BufferedHttpEntity(ht);

InputStream is = buf.getContent();

Теперь у вас есть поток для работы, чтобы записать данные в строку:

BufferedReader r = new BufferedReader(new InputStreamReader(is));

total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
     total.append(line);
}

Удачи!

4 голосов
/ 07 июня 2011

попробуйте использовать AsynTask (http://developer.android.com/reference/android/os/AsyncTask.html) и никогда не пытайтесь выполнять какие-либо трудоемкие задачи в вызове onCreate или любом другом методе потока GUI.

3 голосов
/ 07 июня 2011

Вот код активности Android, который выполняет запрос POST (включая параметры) и отображает полученный ответ в уведомлении Android:

package org.anddev.android.webstuff;

import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.http.util.ByteArrayBuffer;

import android.app.Activity;
import android.app.NotificationManager;
import android.net.http.EventHandler;
import android.net.http.Headers;
import android.net.http.RequestQueue;
import android.net.http.SslCertificate;
import android.os.Bundle;
import android.util.Log;

public class HTTPPostExample extends Activity {

        // ===========================================================
        // Fields
        // ===========================================================

        private final String DEBUG_TAG = "httpPostExample";

        // ===========================================================
        // 'Constructors'
        // ===========================================================

        @Override
        public void onCreate(Bundle icicle) {
                super.onCreate(icicle);

                /* Create a new HTTP-RequestQueue. */
                android.net.http.RequestQueue rQueue = new RequestQueue(this);

                /* Prepare the Post-Text we are going to send. */
                String POSTText = null;
                try {
                        POSTText = "mydata=" + URLEncoder.encode("HELLO, ANDROID HTTPPostExample - by anddev.org", "UTF-8");
                } catch (UnsupportedEncodingException e) {
                        return;
                }
                /* And put the encoded bytes into an BAIS,
                 * where a function later can read bytes from. */
                byte[] POSTbytes = POSTText.getBytes();
                ByteArrayInputStream baos = new ByteArrayInputStream(POSTbytes);

                /* Create a header-hashmap */
                Map<String, String> headers = new HashMap<String, String>();
                /* and put the Default-Encoding for html-forms to it. */
                headers.put("Content-Type", "application/x-www-form-urlencoded");

                /* Create a new EventHandler defined above, to handle what gets returned. */
                MyEventHandler myEvH = new MyEventHandler(this);

                /* Now we call a php-file I prepared. It is exactly this:
                 * <?php
                 *              echo "POSTed data: '".$_POST['data']."'";
                 * ?>*/
                rQueue.queueRequest("http://www.anddev.org/postresponse.php", "POST",
                                headers, myEvH, baos, POSTbytes.length,false);

                /* Wait until the request is complete.*/
                rQueue.waitUntilComplete();
        }

        // ===========================================================
        // Worker Class
        // ===========================================================

        private class MyEventHandler implements EventHandler {
                private static final int RANDOM_ID = 0x1337;

                /** Will hold the data returned by the URLCall. */
                ByteArrayBuffer baf = new ByteArrayBuffer(20);

                /** Needed, as we want to show the results as Notifications. */
                private Activity myActivity;

                MyEventHandler(Activity activity) {
                        this.myActivity = activity;  }

                public void data(byte[] bytes, int len) {
                        baf.append(bytes, 0, len);  }

                public void endData() {
                        String text = new String(baf.toByteArray());
                        myShowNotificationAndLog("Data loaded: n" + text);  }

                public void status(int arg0, int arg1, int arg2, String s) {
                        myShowNotificationAndLog("status [" + s + "]");  }

                public void error(int i, String s) {
                        this.myShowNotificationAndLog("error [" + s + "]");  }

                public void handleSslErrorRequest(int arg0, String arg1, SslCertificate arg2) { }
                public void headers(Iterator arg0) { }
                public void headers(Headers arg0) { }

                private void myShowNotificationAndLog(String msg) {
                        /* Print msg to LogCat and show Notification. */
                        Log.d(DEBUG_TAG, msg);
                        NotificationManager nm = (NotificationManager) this.myActivity
                                        .getSystemService(Activity.NOTIFICATION_SERVICE);
                        nm.notifyWithText(RANDOM_ID, msg, NotificationManager.LENGTH_LONG, null);
                }
        }
}

Код плюс минус

0 голосов
/ 15 сентября 2011

Эта ссылка представляется очень полезной. Я еще не закончил читать, но похоже, что это именно то, что ищет ОП (так же как и я).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...