簡體   English   中英

從Android上的類啟動活動時出錯

[英]Error starting Activity from a Class on Android

我有以下類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);
    }

每次我單擊在單擊事件處理程序中注冊的元素(在活動中),我都會得到流行的錯誤:

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)

我嘗試在意圖,活動的上下文,getApplicationContext和getBaseContext中使用活動。 所有的都在行上拋出相同的錯誤:

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

我已經檢查了SO和各種Web資源,其中大多數指向該活動的資源都需要傳遞給該類,因此在Intent中使用了Context,正如您在上面所看到的,我已經做到了這一點,並確保了調用Activity的所有詳細信息通過和使用,問題仍然存在。

知道我在做什么錯嗎?

嘗試替換為:

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

對此:

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

你有點困惑。 不得使用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用作主要活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM