我有一个使用Asyncttask的应用程序,但我想在执行完一个任务后执行两个任务。但我无法这样做,所以你可以请给我伪代码。 这里是我的AsyncTask类在我的Android应用程序中一个接一个地调用Asynctask
@SuppressWarnings("unused")
private class getresponse extends AsyncTask<String, Void, Void>{
ProgressDialog pd ;
private Context _context;
public getresponse(Context c)
{
_context = c;
}
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(MainActivity.this);
pd = new ProgressDialog(_context);
pd.setTitle("Getting JSON details");
pd.setMessage("Please wait...");
pd.setCancelable(false);
pd.setIndeterminate(true);
pd.show();
super.onPreExecute();
}
@SuppressWarnings("static-access")
@Override
protected Void doInBackground(String... params) {
try {
/*String t = finduserjson.substring(
finduserjson.indexOf("{"),
finduserjson.lastIndexOf(",{"));
String j = "]}";
finduserjson = t + j;
Log.d("FINDUSERJSON", "FINDUSERJSON" + finduserjson);*/
jsonobject1.put("username", params[0]);
jsonobject1.put("udid",
"A892E0AB-6732-4F42-BEFA-3157315E9EE4");
socket.emit("setPseudo", jsonobject1);
socket.emit("findAllUsers", jsonobject1);
Log.e("TAG",""+ socket.getId());
} catch (JSONException | MalformedURLException e1) {
if (pd.isShowing())
pd.dismiss();
e1.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
try
{
if (pd.isShowing())
pd.dismiss();
}
catch(Exception e)
{
}
/*String t = finduserjson.substring(
finduserjson.indexOf("{"),
finduserjson.lastIndexOf(",{"));
String j = "]}";
finduserjson = t + j;
Log.d("FINDUSERJSON", "FINDUSERJSON" + finduserjson);
Intent intent = new Intent(MainActivity.this,
MenuScreen.class);
intent.putExtra("onlineuser", onlineuser);
intent.putExtra("finduser", finduserjson);
startActivity(intent);*/
new getresponse111(MainActivity.this).execute();
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
pd.dismiss();
}
}
private class getresponse111 extends AsyncTask<Void, Void, Void>{
private Context _context;
public getresponse111(Context c)
{
_context = c;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@SuppressWarnings("static-access")
@Override
protected Void doInBackground(Void... params) {
String t = finduserjson.substring(
finduserjson.indexOf("{"),
finduserjson.lastIndexOf(",{"));
String j = "]}";
finduserjson = t + j;
Log.d("FINDUSERJSON", "FINDUSERJSON" + finduserjson);
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Intent intent = new Intent(MainActivity.this,
MenuScreen.class);
intent.putExtra("onlineuser", onlineuser);
intent.putExtra("finduser", finduserjson);
startActivity(intent);
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
}
错误是继在另一个的AsyncTask的onPostExecute
09-25 13:00:30.997: E/AndroidRuntime(5906): FATAL EXCEPTION: AsyncTask #3
09-25 13:00:30.997: E/AndroidRuntime(5906): java.lang.RuntimeException: An error occured while executing doInBackground()
09-25 13:00:30.997: E/AndroidRuntime(5906): at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
09-25 13:00:30.997: E/AndroidRuntime(5906): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.lang.Thread.run(Thread.java:841)
09-25 13:00:30.997: E/AndroidRuntime(5906): Caused by: java.lang.NullPointerException
09-25 13:00:30.997: E/AndroidRuntime(5906): at com.example.socketserver.MainActivity$getresponse111.doInBackground(MainActivity.java:231)
09-25 13:00:30.997: E/AndroidRuntime(5906): at com.example.socketserver.MainActivity$getresponse111.doInBackground(MainActivity.java:1)
09-25 13:00:30.997: E/AndroidRuntime(5906): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-25 13:00:30.997: E/AndroidRuntime(5906): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-25 13:00:30.997: E/AndroidRuntime(5906): ... 4 more
直接询问码**所以可以请你只给我的伪代码。** ..哇!!!! – 2014-09-25 06:51:05
我不明白你想完成什么,我只看到1个异步任务,不是你想要执行同一个Asynctask的2个实例吗? – zozelfelfo 2014-09-25 06:54:24
你想要伪代码,所以,你得到伪代码,你知道,你应该从AsyncTask的onTaskComplete方法中正确地得到你的结果(你的Activity应该实现的接口或者实现该接口的额外类)确保数据在异步任务后可用。你怎么做,是在'onPostExecute'中调用Activity的'onTaskComplete',它叫做AsyncTask。一个实际的例子是在这里http://www.jameselsey.co.uk/blogs/techblog/extracting-out-your-asynctasks-into-separate-classes-makes-your-code-cleaner/亲切的问候 – 2014-09-25 07:00:07