android eclipse настраивает http POST и ПОЛУЧАЕТ доступ к веб-серверу

#android #eclipse #apache #http

#Android #eclipse #apache #http

Вопрос:

Мне нужна помощь в настройке приложения на Android с использованием eclipse.

Я раньше не использовал eclipse для разработки на JAVA, поэтому я немного не в курсе, как все это сочетается с Android в миксе.

У меня есть скрипт, который я загрузил для тестирования на моем веб-сервере, который был настроен на выдачу выходных данных при обращении (на данный момент пары именованных значений в формате JSON).

Я использую —
Eclipse IDE для Java-разработчиков
Версия: Helios Service Release 2
Идентификатор сборки: 20110218-0911

Android Development Toolkit
Версия: 10.0.1.v201103111512-110841

Код JAVA до сих пор —

 package new.android.test;

import android.app.Activity;
import android.os.Bundle;
import java.io.ByteArrayInputStream;
import java.net.Socket;

import org.apache.http.ConnectionReuseStrategy;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
import org.apache.http.impl.DefaultHttpClientConnection;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.params.SyncBasicHttpParams;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpRequestExecutor;
import org.apache.http.protocol.ImmutableHttpProcessor;
import org.apache.http.protocol.RequestConnControl;
import org.apache.http.protocol.RequestContent;
import org.apache.http.protocol.RequestExpectContinue;
import org.apache.http.protocol.RequestTargetHost;
import org.apache.http.protocol.RequestUserAgent;
import org.apache.http.util.EntityUtils;

/**
 * Elemental example for executing a POST request.
 * <p>
 * Please note the purpose of this application is demonstrate the usage of HttpCore APIs.
 * It is NOT intended to demonstrate the most efficient way of building an HTTP client. 
 *
 *
 *
 */

public class search extends Activity {

    public static void main(String[] args) throws Exception {

        HttpParams params = new SyncBasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "UTF-8");
        HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");
        HttpProtocolParams.setUseExpectContinue(params, true);

        HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] {
                // Required protocol interceptors
                new RequestContent(),
                new RequestTargetHost(),
                // Recommended protocol interceptors
                new RequestConnControl(),
                new RequestUserAgent(),
                new RequestExpectContinue()});

        HttpRequestExecutor httpexecutor = new HttpRequestExecutor();

        HttpContext context = new BasicHttpContext(null);

        HttpHost host = new HttpHost("localhost", 80);

        DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
        ConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy();

        context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
        context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host);

        try {

            HttpEntity[] requestBodies = {
                    new StringEntity(
                            "This is the first test request", "UTF-8"),
                    new ByteArrayEntity(
                            "This is the second test request".getBytes("UTF-8")),
                    new InputStreamEntity(
                            new ByteArrayInputStream(
                                    "This is the third test request (will be chunked)"
                                    .getBytes("UTF-8")), -1)
            };

            for (int i = 0; i < requestBodies.length; i  ) {
                if (!conn.isOpen()) {
                    Socket socket = new Socket(host.getHostName(), host.getPort());
                    conn.bind(socket, params);
                }
                BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", 
                        "/android.php");
                request.setEntity(requestBodies[i]);
                System.out.println(">> Request URI: "   request.getRequestLine().getUri());

                request.setParams(params);
                httpexecutor.preProcess(request, httpproc, context);
                HttpResponse response = httpexecutor.execute(request, conn, context);
                response.setParams(params);
                httpexecutor.postProcess(response, httpproc, context);

                System.out.println("<< Response: "   response.getStatusLine());
                System.out.println(EntityUtils.toString(response.getEntity()));
                System.out.println("==============");
                if (!connStrategy.keepAlive(response, context)) {
                    conn.close();
                } else {
                    System.out.println("Connection kept alive...");
                }
            }
        } finally {
            conn.close();
        }        
    }

}
  

Хорошо, главный вопрос в том, почему так много импорта?

Также я получаю ошибки при этом импорте:

 The import org.apache.http.params.SyncBasicHttpParams cannot be resolved  
The import org.apache.http.protocol.ImmutableHttpProcessor cannot be resolved  
  

Я не вижу эти классы в android.jar.

Есть ли более простой пример реализации транзакции с веб-сервером для получения namevaluepair (JSON) для использования в приложении Android Java?

Ответ №1:

Эти ошибки вызваны тем, что классы, на которые вы ссылаетесь, не являются частью стандартного дистрибутива Android: см. http://developer.android.com/reference/org/apache/http/params/package-summary.html и http://developer.android.com/reference/org/apache/http/protocol/package-summary.html.

Android переупаковывает определенную версию HTTP-библиотеки Apache. Если вы хотите использовать эти классы, вам нужно будет включить эти jar.

Комментарии:

1. Как мне включить эти jar? Если я включу нестандартные банки Android, будут ли у меня проблемы с запуском на устройстве Android?

2. Ну, я не знаю, какие конкретные jar-файлы Apache вам нужно будет включить: я предполагаю, что вы используете код, который у вас был раньше, поэтому, откуда бы вы ни взяли этот код, он должен указывать вам на нужные файлы jar. Просто добавьте их в свой проект eclipse, и все будет готово. Это не должно быть проблемой с вашим устройством.

3. Хорошо, теперь я все разобрал. Я включил дополнительные пакеты как часть пути сборки, и больше таких ошибок нет