Java 如何从另一个异步任务停止(中止)一个异步任务?
我有一个包含2个AsyncTask的主活动,我希望其中一个Java 如何从另一个异步任务停止(中止)一个异步任务?,java,android,json,multithreading,mobile,Java,Android,Json,Multithreading,Mobile,我有一个包含2个AsyncTask的主活动,我希望其中一个AsyncTask中止另一个AsyncTask class Contador extends AsyncTask<String, String, String>{ @Override protected void onPreExecute() { } @Override protected String doInBackground(String... params) { // TODO Auto-generat
AsyncTask
中止另一个AsyncTask
class Contador extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try {
httpclientContador = new DefaultHttpClient();
String sContador = "http://webmilab.com/SEDESOL/index.php/transferencias/conteo/" + resIdEncuesta;
pContador = new HttpPost(sContador);
pContador.addHeader("content-type", "application/x-www-form-urlencoded");
JSONObject jContador = new JSONObject();
jContador.put("mensaje", "Empezar a contar :)");
StringEntity eContador = new StringEntity("json="+jContador.toString(), "UTF-8");
pContador.setEntity(eContador);
httpclientContador.execute(pContador);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(TransferirDatos.this, "Hubo un error al realizar la petición del conteo", Toast.LENGTH_LONG).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
}
}
}
您的问题是,您试图在doInBackground方法中打印一个Toast。 此方法在后台线程中执行,因此无法与UI交互。 你可以在这里读到更多
您可以使用此方法在任务结束后通知用户,或在任务运行时使用此方法更新。第二个类中的您的pContador在哪里?你能发布crashHttpPost pContador的日志吗?pContador是一个全局变量。你在全局范围内初始化了两个AsyncTask类吗?是的,我在全局范围内初始化了这两个类,当我按下i按钮时,它们都被初始化了。非常感谢,它在没有Toast的情况下工作了。还有一个问题,当我中止AsyncTask时,onpostExecute被执行??否,onpostExecute作为参数获取onBackground的结果,因此如果onBackground没有被调用,onpostExecute永远不会被调用。您可以退房,但仍不会在所有情况下都打电话给您。
class Contador extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
//Some Code
return null;
}
protected void onPostExecute(String file_url) {
pContador.abort();
}
}
04-08 09:22:48.625: E/AndroidRuntime(10950): FATAL EXCEPTION: AsyncTask #3
04-08 09:22:48.625: E/AndroidRuntime(10950): java.lang.RuntimeException: An error occured while executing doInBackground()
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.os.AsyncTask$3.done(AsyncTask.java:278)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.lang.Thread.run(Thread.java:856)
04-08 09:22:48.625: E/AndroidRuntime(10950): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.os.Handler.<init>(Handler.java:121)
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.widget.Toast$TN.<init>(Toast.java:317)
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.widget.Toast.<init>(Toast.java:91)
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.widget.Toast.makeText(Toast.java:233)
04-08 09:22:48.625: E/AndroidRuntime(10950): at tsp.consulting.TransferirDatos$Contador.doInBackground(TransferirDatos.java:184)
04-08 09:22:48.625: E/AndroidRuntime(10950): at tsp.consulting.TransferirDatos$Contador.doInBackground(TransferirDatos.java:1)
04-08 09:22:48.625: E/AndroidRuntime(10950): at android.os.AsyncTask$2.call(AsyncTask.java:264)
04-08 09:22:48.625: E/AndroidRuntime(10950): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)