【发布时间】:2014-02-11 20:20:07
【问题描述】:
我正在尝试从服务而不是来自活动的发布 Http 请求。在 timertask 的帮助下,该服务已设置为 5 秒后连续调用。
在此服务中,我正在发送抛出错误android.os.NetworkOnMainThreadException 的http 请求,我知道为什么在我从主线程发送违反android 规则的http 请求时会抛出此错误。
此外,我知道我可以使用 AsyncTask 类,但问题是 AsyncTask 类需要有 UI 线程,而我在服务中没有。
可能是我遇到的另一个限制是父类每 5 秒使用一次调用这个类,所以可能是一些线程问题。不确定。
那么,任何人都可以建议我执行此任务的一些想法,我不确定我是否可以使用处理程序,如果可以,请给我一个简单的例子,因为我与 android 有点脱节。
如果您需要我的代码 sn-p 告诉我,但它非常直接,只是使用 httpclient 的 json HTTP 请求。
public abstract class Data extends TimerTask {
protected void request(JSONObject content) {
Log.i(TAG, content.toString());
try {
HttpClient client = new DefaultHttpClient();
HttpPost httpost = new HttpPost("http://test.test.test/data.json");
StringEntity se = new StringEntity(measurement.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
client.execute(httpost, responseHandler);
}catch(IOException exception){
exception.printStackTrace();
}
}
}
【问题讨论】:
-
由于
TimerTask是在后台线程上执行的,因此您的代码有问题。请发布代码和完整的堆栈跟踪。 -
这是更新的
-
首先,
Data是一个抽象类,这意味着这里至少还有一个您没有的其他类,因为您无法创建Data的实例。其次,您没有发布堆栈跟踪。 -
是的,但我想更多的 imp 是如何从这里发出 http 请求 ....
标签: android multithreading android-asynctask android-service httprequest