簡體   English   中英

Android:調用新意圖時出現空指針異常

[英]Android: Null Pointer Exception when calling new intent

嘗試通過意圖調用新活動時收到錯誤:

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

我的Activity有一個按鈕,點擊后會轉到這個方法:

public void onClickChangeActivity() {

        Intent intent = new Intent(context , Details.class);
        startActivity(intent);

    }

public static Context context在類的開頭創建,然后在我的onCreate中實例化為context = getApplicationContext();

我也嘗試過context = getBaseContext()和context = RecyclerViewActivity.this(RecyclerViewActivity是我當前類的名字)

有關為什么我收到這個NullP的任何幫助? 我已經嘗試了所有與StackOverFlow相關的答案。 另外,我的清單包括我的活動。

從我的RecyclerViewerAdapter類調用onClickChangeActivity:

View.OnClickListener getPersonClickListener(final int position) {
        return new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                RecyclerViewActivity recyclerViewActivity = new RecyclerViewActivity();
                recyclerViewActivity.onClickChangeActivity();
            }
        };

清單文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.akash.android_test" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- <activity -->
        <!-- android:name=".DataFetcher" -->
        <!-- android:label="@string/title_activity_data_fetcher" > -->
        <!-- </activity> -->
        <activity
            android:name=".Crime"
            android:label="@string/title_activity_crime"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".RecyclerViewActivity"
            android:label="@string/title_activity_recycler_view"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".Details"
            android:label="@string/title_activity_crime_details"
            android:parentActivityName=".RecyclerViewActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="RecyclerViewActivity" />
        </activity>
    </application>

</manifest>

logcat的:

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
            at android.content.ContextWrapper.getPackageName(ContextWrapper.java:132)
            at android.content.ComponentName.<init>(ComponentName.java:77)
            at android.content.Intent.<init>(Intent.java:4160)
            at com.bah.baltimoreopendata.android_baltimoreopendata.RecyclerViewActivity.onClickChangeActivity(RecyclerViewActivity.java:265)
            at com.bah.baltimoreopendata.android_baltimoreopendata.RecycleViewAdapter$1.onClick(RecycleViewAdapter.java:121)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            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:5254)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

問題是您嘗試從適配器調用活動方法:

RecyclerViewActivity recyclerViewActivity = new RecyclerViewActivity();
recyclerViewActivity.onClickChangeActivity();

您應該在適配器類中替換此代碼。 在適配器構造函數中添加以下行:

public RecycleViewAdapter(......, Context context){
    ...your code.
    this.mContext=context;
}

並在in getPersonClickListener適配器方法中:

View.OnClickListener getPersonClickListener(final int position) {
    return new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(mContext instanceof RecyclerViewActivity){
                ((RecyclerViewActivity)mContext).onClickChangeActivity();
            }
        }
    };

當您在RecyclerViewActivity上調用onClickChangeActivity方法時,使用:

public void onClickChangeActivity() {
    Intent intent = new Intent(RecyclerViewActivity.this, Details.class);
    startActivity(intent);
}

並確保Details.class擴展Activity。

試試這個:

Intent intent = new Intent(RecyclerViewActivity.this , Details.class);
startActivity(intent);

使用RecyclerViewActivity.this而不是context

解:

在適配器類中創建private static Context context;

在inCreateViewHolder()中,實例化viewGroup.getContext()的上下文:

@Override
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
        PersonViewHolder pvh = new PersonViewHolder(v);
        context = viewGroup.getContext();
        return pvh;
    }

這就是我得到Null指針異常的原因。 出於某種原因,我創建了一個帶有上下文的構造函數,上下文仍為null。 在上面的類中實例化上下文就可以了! 感謝所有回答的人。

您正在嘗試啟動Details.class -

但是我在清單中找不到對此活動的任何引用。

請加

<activity android:name=".Details"</activity>

對您的清單,並確保詳細信息擴展活動。

暫無
暫無

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

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