Android - 可以在服务中运行DefaultHTTPClient吗?

时间:2012-12-14 18:42:50

标签: android service httpclient

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

2 个答案:

答案 0 :(得分: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(); }

答案 1 :(得分:0)

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

您可以使用ResultReceiver

或者,您可以使用像Otto这样的服务总线(如果您愿意稍微了解一下总线并进行设置,这会更容易,并且它在很多地方都很方便,而不仅仅是服务)。

要真正提供帮助,您需要更清楚地提出问题。您的服务是否已经正常工作并发出HTTP请求,您只需要将结果发送到其他组件,或者您是否可以让DefaultHTTPClient完全无法工作,服务与否?

此外,如果您不想自己处理线程,则应查看IntentService。对于像“服务中的HTTP客户端”这样的东西,它通常是一个很好的候选者。

此问题包含更多常规信息:Android - httpclient as a backgroundservice