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