使用intent启动活动时的致命异常(空指针异常)

时间:2016-01-17 18:06:13

标签: java android android-intent android-activity

下面这段代码在我的应用程序中抛出一个空指针异常。我试图通过一个intent来调用一个活动,(关于这个的一些背景信息是通过点击一个按钮触发正在打开的活动,因此我在按钮的onclickListener本身中调用了startActivity()函数。

以下是代码:

public class CategoryButtonOnClickListener extends Activity implements View.OnClickListener {
    private final int position;
    public CategoriesPage categoriesPage;
    Context context;

    public CategoryButtonOnClickListener(int position, Context contextPassed) {
        this.position = position;
        this.context  = contextPassed;
        categoriesPage = new CategoriesPage();
    }

    public void onClick(View v) {
        callCategoryList(this.position);
    }

    public void callCategoryList(int position) {
        String[] categories = categoriesPage.getCategories();
        Intent categoriesList = new Intent(this.context,BooksWithCategories.class);
        //I tried commenting this code to fix it as seen from another post, didnt work
        //categoriesList.putExtra("Category:",categories[position]);
        startActivity(categoriesList);
        //Toast.makeText(context,categories[position],Toast.LENGTH_LONG).show();
     }
}

抛出的错误如下:

 1-17 23:27:15.076    2614-2614/com.dogra.booker E/AndroidRuntime﹕    FATAL    EXCEPTION: main
Process: com.dogra.booker, PID: 2614
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
        at android.app.Activity.startActivityForResult(Activity.java:3736)
        at android.app.Activity.startActivityForResult(Activity.java:3697)
        at android.app.Activity.startActivity(Activity.java:4007)
        at android.app.Activity.startActivity(Activity.java:3975)
        at com.dogra.booker.UI.Model.CategoryButtonOnClickListener.callCategoryList(CategoryButtonOnClickListener.java:36)
        at com.dogra.booker.UI.Model.CategoryButtonOnClickListener.onClick(CategoryButtonOnClickListener.java:29)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

对于可能出现的问题的任何建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

将此方法放在您的代码中:

 Activity getAct() {
    Context context = getContext();
    while (context instanceof ContextWrapper) {
        if (context instanceof Activity) {
            return (Activity) context;
        }
        context = ((ContextWrapper) context).getBaseContext();
    }
    return null;
}

然后用它来启动活动:

  Intent categoriesList = new  Intent(getAct(),BooksWithCategories.class);

答案 1 :(得分:0)

可以尝试这个

 Intent categoriesList = new  Intent(CategoryButtonOnClickListener.this,BooksWithCategories.class);