从Android上的类启动活动时出错

时间:2015-11-20 08:18:41

标签: java android android-intent android-activity android-6.0-marshmallow

我有以下类SubMenuToolBar,我通常从一个活动(MainActivity)实例化,它在实例化时在构造函数中传递自己(this):

public class SubMenuToolBar extends Activity {
        private android.support.v7.widget.Toolbar mToolbar;
        private Activity mActivity;
        RelativeLayout mLayout;

public SubToolbar(android.support.v7.widget.Toolbar toolbar, Activity activity) {
            mActivity = activity;
            mToolbar = toolbar;
            mLayout = (RelativeLayout) mToolbar.findViewById(R.id.layout_toolbar);

            mLayout.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Intent intent = new Intent(mActivity, UserMessagesActivity.class);
                    startActivity(intent);
                }
            });

    }

MainActivity.cs

protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
    new SubMenuToolBar ((android.support.v7.widget.Toolbar) findViewById(R.id.sub_toolbar), this);
    }

每次我点击用click事件处理程序注册的元素(在活动中)我都会得到流行的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime:     at android.app.Activity.startActivityForResult(Activity.java:3918)
11-20 08:31:33.422 23802-23802/com.xxx .apps.xxx E/AndroidRuntime:     at android.app.Activity.startActivityForResult(Activity.java:3877)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime:     at android.app.Activity.startActivity(Activity.java:4200)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx  E/AndroidRuntime:     at android.app.Activity.startActivity(Activity.java:4168)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime:     at com.xxx.apps.xxx.SubMenuToolBar$1.onClick(SubToolbar.java:28)

我尝试过使用Intent中的Activity,activity的context,getApplicationContext和getBaseContext。 All在线上抛出相同的错误:

 Intent intent = new Intent(mActivity, MessagesActivity.class);

我已经检查了SO和各种web资源,其中大多数指向需要传递给类的活动,因此它在Intent中使用了Context,我已经完成了,如上所示确保传递和使用调用Activity的所有细节,问题仍然存在。

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

尝试替换此:

Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);

到此:

Intent intent = new Intent(mActivity, UserMessagesActivity.class);
mActivity.startActivity(intent);

答案 1 :(得分:0)

你有点困惑。不得使用new实例化活动。您必须使用Intent启动它。有两个活动,但我认为你只需要一个。

public class SubMenuToolBar extends Activity {

    RelativeLayout mLayout;

    @Override
    protected void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        setContentView(R.layout.your_activity_layout);

        android.support.v7.widget.Toolbar mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.sub_toolbar);

        mLayout = (RelativeLayout)mToolbar.findViewById(R.id.layout_toolbar);

        mLayout.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent intent = new Intent(mActivity, UserMessagesActivity.class);
            startActivity(intent);
        });
}

并使用SubMenuToolBar作为主要活动。