AsynchTask从doInBackground返回时崩溃

Mit*_*tch 0 android

我有以下代码:

public class TestSynch extends Activity {

public static ArrayList<HashMap<String,String>> list;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.splash);
    Context ctx = this.getApplicationContext();


    new ProcessFileTask().execute(ctx);

    Intent i = new Intent(TestSynch.this, ListSchools.class);
    i.setAction(Intent.ACTION_VIEW);
    i.putExtra("arraylist", list);
    startActivity(i);

}

private class ProcessFileTask extends AsyncTask<Context, Void, ArrayList<HashMap<String,String>>> {
    @Override
    protected ArrayList<HashMap<String,String>> doInBackground(Context... ctx) {

        ArrayList<HashMap<String,String>> threadList = FileOperations.getListAsMaps(ctx[0]);
        return threadList;
    }
    @Override
    protected void onPostExecute(ArrayList<HashMap<String,String>> result) {
         list = result;
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以调试返回threadList; 在doInBackground中的行,并且ArrayList变量threadList是完全正确的.

但是,onPostExecute似乎没有被调用,并且从doInBackground返回时Activity崩溃,LogCat建议尝试触发Intent的nullPointerException(我之前测试过并且在我开始搞乱AsynchTask之前工作正常)

知道为什么会这样吗?代码看起来很简单......

谢谢

waq*_*lam 5

您需要在Async的onPostExecute方法中移动startActivity部分.

例如:

public class TestSynch extends Activity {

//public static ArrayList<HashMap<String,String>> list;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.splash);
    Context ctx = this.getApplicationContext();


    new ProcessFileTask().execute(ctx);
}

private class ProcessFileTask extends AsyncTask<Context, Void, 
        ArrayList<HashMap<String,String>>> {
    @Override
    protected ArrayList<HashMap<String,String>> doInBackground(Context... ctx) {

        ArrayList<HashMap<String,String>> threadList = 
             FileOperations.getListAsMaps(ctx[0]);

        return threadList;
    }
    @Override
    protected void onPostExecute(ArrayList<HashMap<String,String>> result) {
         Intent i = new Intent(TestSynch.this, ListSchools.class);
         i.setAction(Intent.ACTION_VIEW);
         i.putExtra("arraylist", result);
         startActivity(i);
    }
}
Run Code Online (Sandbox Code Playgroud)