我在 Android 服务中运行 DefaultHttpClient,但即使出现错误也无法得到任何结果。可能吗?通过上网,我发现将HTTPClient作为服务,但我在服务中找不到调用HTTPClient。期待帮助。
问问题
94 次
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 回答