Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用TimerTask每X秒进行一次Http请求_Java_Android_Timer_Httprequest_Timertask - Fatal编程技术网

Java 使用TimerTask每X秒进行一次Http请求

Java 使用TimerTask每X秒进行一次Http请求,java,android,timer,httprequest,timertask,Java,Android,Timer,Httprequest,Timertask,我想每X秒向服务器发送一次请求,并获得结果。 如果不使用timer,它工作正常,但如果使用timer.scheduleAtFixedRate,则会出现异常: “无法在未调用Looper.prepare()的线程内创建处理程序” 我怎样才能摆脱这个? 谢谢 public类MainMap扩展了ActionBarActivity实现了LocationListener、View.OnClickListener{ @凌驾 创建时受保护的void(Bundle savedInstanceState){ in

我想每X秒向服务器发送一次请求,并获得结果。 如果不使用timer,它工作正常,但如果使用timer.scheduleAtFixedRate,则会出现异常:

“无法在未调用Looper.prepare()的线程内创建处理程序”

我怎样才能摆脱这个? 谢谢

public类MainMap扩展了ActionBarActivity实现了LocationListener、View.OnClickListener{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
int initialDelay=1000;
整数周期=5000;
定时器=新定时器();
TimerTask任务=新的TimerTask(){
公开募捐{
//每5秒请求一次
设置位置();
}
};
timer.scheduleAtFixedRate(任务、初始延迟、周期);
}
公共无效设置位置(){
getCurrentLocation();
ArrayList dataDelete=新建ArrayList();
Map mUserDelete=新HashMap();
if(isOnline){
mUserDelete.put(“可用”,String.valueOf(1));
}否则{
mUserDelete.put(“可用”,String.valueOf(0));
}
mUserDelete.put(“id”,user.getId());
mUserDelete.put(“经度”,String.valueOf(经度));
mUserDelete.put(“纬度”,String.valueOf(纬度));
添加(新的JSONObject(mUserDelete));
JSONArray jsonArrayDelete=新的JSONArray();
jsonArrayDelete.put(dataDelete);
final JSONObject jsonObjectDelete=new JSONObject();
试一试{
put(“请求”,jsonArrayDelete);
新建AsyncServerRequest().execute(jsonObjectDelete);
}捕获(JSONException e){
d(Constants.tag,“JSONException:+e.getMessage());
}
}
public void getCurrentLocation(){
lm=(LocationManager)getSystemService(Context.LOCATION\u服务);
location=lm.getLastKnownLocation(LocationManager.GPS\U提供程序);
lm.RequestLocationUpdate(LocationManager.GPS_提供程序,2000,10,locationListener);
longitude=location.getLongitude();
纬度=位置。getLatitude();
}
公共类AsyncServerRequest扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(长期){
super.onPostExecute(沿);
}
@凌驾
受保护的长doInBackground(最终JSONObject…JSONObject){
最终HttpRequest请求=新的HttpRequest(uriStatus,jsonObjects[0]);
makeHttpRequest();
返回null;
}
}
}

问题在于这行代码

new AsyncServerRequest().execute(jsonObjectDelete);
您不能也不应该从后台线程启动
AsyncTask
,而是始终从UI线程启动。而且您可能不需要
AsyncTask
,因为
TimerTask
已经在后台线程上运行了

new AsyncServerRequest().execute(jsonObjectDelete);