#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. Хорошо, теперь я все разобрал. Я включил дополнительные пакеты как часть пути сборки, и больше таких ошибок нет