我在REST API
上Android
进行AsyncTask
我有多个HTTPGet
(一个用于HTTPPost
,另一个用于AsyncTask
)我没有遇到任何问题但是,当我尝试执行我使用HTTPDelete
的{{1}}时,它并没有执行doInBackground()
方法。
在搜索结果中我找到了这个解决方案:Android SDK AsyncTask doInBackground not running (subclass)但我对使用.executeOnExecutor
不安全,因为我在官方文档中搜索:executeOnExecutor并且它说这可能是问题。
例如,如果这些任务用于修改任何共同的状态(例如由于点击按钮而编写文件),则无法保证修改的顺序。
我正在使用GET
,POST
和DELETE
方法修改我的database
(我知道它不是file
1}}但我认为它可以给我同样的问题。)
根据这一点,我不能确定如何执行此.doInBackground()
方法,因为我不希望将来遇到问题。
我应该使用什么?
这是我的AsyncTask
:
class DeleteCar extends AsyncTask<Integer, Integer, Void> {
protected void onPreExecute(){
}
protected Void doInBackground(Integer... id) {
try{
String url = "http://IP of my computer/project/cars/" + id[0].intValue();
HttpClient httpClient = new DefaultHttpClient();
HttpDelete method= new HttpDelete(url);
method.setHeader("content-type", "application/json");
HttpResponse response = httpClient.execute(method);
HttpEntity httpEntity = response.getEntity();
}catch(Exception ex){
Log.e("ServicioRest",ex.toString());
}
return null;
}
protected void onProgressUpdate(){
}
protected void onPostExecute(){
}
}
我按照这样执行:
new DeleteCar().execute(idCar);
其中idCar
Integer idCar = new Integer(id);
和id
int
{/ 1}}。
注意:它以onPreExecute()
方式输入,但不在doInBackground() method
输入。
答案 0 :(得分:-1)
这是一个虚拟代码:
public class DeleteCar extends AsyncTask<Integer,Integer,Void> {
@Override
protected Void doInBackground(Integer... params) {
//logging to show that it is working
Log.d("result:", String.valueOf(params[0].intValue()));
return null;
}
}
我为AsyncTask创建了不同的类。然后我从我的活动中调用它:
new DeleteCar().execute(new Integer(10));
完美地工作/执行doInBackground方法。
我的建议是使用改造。这里是学习改造的几个链接: 1. http://square.github.io/retrofit/ 2.这是一个比较:https://androidtutorialmagic.wordpress.com/android-asynctask-and-its-dark-side/comparison-among-asynctaskvolley-and-retrofit/ 3.这是一个基本教程:https://androidtutorialmagic.wordpress.com/android-asynctask-and-its-dark-side/retrofit-networking-in-android-tutorial-replacement-of-asynctask-and-volley/
我一直在使用Retrofit。我的反应非常快。如果您需要更多帮助来使用改造,请告诉我。感谢