0

我在 Android 服务中运行 DefaultHttpClient,但即使出现错误也无法得到任何结果。可能吗?通过上网,我发现将HTTPClient作为服务,但我在服务中找不到调用HTTPClient。期待帮助。

4

2 回答 2

0

您是否查看过如何在 Java 中使用 HTTP 客户端、发布和响应?这是一个基本示例,可能会在 AsyncTask doInBackground 函数中使用:

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;


//in doInBackground() or other thread outside of main
InputStream myStream;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

try {
    nameValuePairs.add(new BasicNameValuePair("currentUser", currentUserVar));
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = httpClient.execute(httpPost);

    myStream = response.getEntity().getContent();

} catch (ClientProtocolException e) { e.printStackTrace(); 
} catch (IOException e) { e.printStackTrace(); }
于 2012-12-14T18:45:52.477 回答
0

是的,您可以在 Android 服务中“运行 DefaultHttpClient”。您可以通过多种方式将结果(响应代码、响应等)返回给您的其他组件(活动等)。

您可以使用ResultReceiver

或者,您可以使用 Otto 之类的服务总线(如果您愿意了解一些有关总线的知识并进行设置,这会容易得多,而且它在许多地方都很方便,而不仅仅是服务)。

要真正提供帮助,您需要让问题更清楚一些。您的服务是否已经在工作并发出 HTTP 请求,您只需要将结果发送给其他组件,或者您根本无法让 DefaultHTTPClient 工作,服务与否?

此外,如果您不想自己处理线程,您应该查看IntentService。它通常是“服务中的 HTTP 客户端”之类的理想选择。

这个问题有更多的一般信息:Android - httpclient as a backgroundservice

于 2012-12-14T18:53:16.143 回答