Android 无法暂停活动-nullpointerexception

Android 无法暂停活动-nullpointerexception,android,actionbarsherlock,android-listfragment,Android,Actionbarsherlock,Android Listfragment,这是由SherlockListFragment(在TabSwipe中)和AsyncTask doInBackground引起的 单击列表项开始生成一个大的可包裹项,完成后,该项应移动到一个新活动(TabSwipe容器外部),并将该可包裹作为一个包传递 以下是异步代码: public class BackgroundSetUpReportData extends AsyncTask<Integer, Integer, PainReport_Holder> { // decla

这是由SherlockListFragment(在TabSwipe中)和AsyncTask doInBackground引起的

单击列表项开始生成一个大的可包裹项,完成后,该项应移动到一个新活动(TabSwipe容器外部),并将该可包裹作为一个包传递

以下是异步代码:

public class BackgroundSetUpReportData extends AsyncTask<Integer, Integer, PainReport_Holder> {

    // declare the dialog
    ProgressDialog progressDialog;

    // show the dialog
    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setCancelable(false);
        progressDialog
                .setMessage("Building Summary:\nThis may take some time.\nPlease wait...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setProgress(0);
        progressDialog.show();
    }

    @Override
    protected PainReport_Holder doInBackground(Integer... params) {

        DataLayer d = new DataLayer(getActivity().getBaseContext());

        //lots of adding to the PRH class
        return PRH;
    }

    // update the progress dialog
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    // show the data
    protected void onPostExecute(PainReport_Holder result) {
        // hide the dialog
        progressDialog.dismiss();
        moveToActivity();
    }

}

public void moveToActivity() {
    Bundle b = new Bundle();
    b.putParcelable("SummaryData", PRH);
    b.putString("fromDate", fromDate);
    b.putString("toDate", toDate);
    Intent i = new Intent(getActivity(), my_new.class);
    i.putExtras(b);
    startActivity(i);
}
在移动到碎片之前,它工作得很好,并且仍然可以正常工作,直到我们到达moveToActivity()的startActivity(i)行;在抛出此错误的位置:

05-01 23:41:39.906: E/AndroidRuntime(25684): FATAL EXCEPTION: main
05-01 23:41:39.906: E/AndroidRuntime(25684): java.lang.RuntimeException: Unable to pause activity {[app]/[app].[class]}: java.lang.NullPointerException
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2358)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2315)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2295)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread.access$1700(ActivityThread.java:117)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.os.Looper.loop(Looper.java:130)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread.main(ActivityThread.java:3687)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at java.lang.reflect.Method.invokeNative(Native Method)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at java.lang.reflect.Method.invoke(Method.java:507)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at dalvik.system.NativeStart.main(Native Method)
05-01 23:41:39.906: E/AndroidRuntime(25684): Caused by: java.lang.NullPointerException
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.Activity.performSaveInstanceState(Activity.java:1037)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1181)
05-01 23:41:39.906: E/AndroidRuntime(25684):    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2340)
05-01 23:41:39.906: E/AndroidRuntime(25684):    ... 12 more
我所做的其他研究表明,传递的数据中有空条目,但我在debug中检查了PRH类,其中没有空条目

更新

我已经遍历了AsyncTask线程,它似乎在以下位置抛出ClassNotFound异常:

Intent i = new Intent(getActivity(), my_new.class);
其中“未找到”类是my_new.class,它肯定存在。事实上,如果我加上

getActivity().finish();
以前

startActivity(i);
然后工作正常,但调用活动不再在后堆栈中

澄清;父母是

public class myTabsActivity extends TabSwipeActivity {
TabSwipeActivity是

public abstract class TabSwipeActivity extends SherlockFragmentActivity {
我要处理的碎片是

public class myClassFragment extends SherlockListFragment {

我是否丢失了片段中的一个实现?

我记得我曾经在片段中的AsyncTask中获得NLP。 我不记得问题是否完全相同,但我通过在onPreExecute中获取对应用程序上下文的引用来解决它

/* ... */
Context ctx;

@Override
protected void onPreExecute() {
    /* ... */
    ctx = getActivity().getApplicationContext();
    /* ... */
}
在需要的地方使用它而不是getActivity()来创建意图


希望有帮助。

我认为您的问题与
getActivity()
内部的
moveToActivity()
方法有关。也许您应该使用
getParent()
getSupportFragmentManager()
或其他任何东西。 我认为
getActivity()
在使用片段时返回null


希望有帮助

谢谢,但那没用。我做了一些进一步的挖掘,并相应地更新了我的问题。谢谢,但这不起作用。我做了一些进一步的挖掘,并相应地更新了我的问题。你能发布这个活动和片段的完整代码吗?
/* ... */
Context ctx;

@Override
protected void onPreExecute() {
    /* ... */
    ctx = getActivity().getApplicationContext();
    /* ... */
}