[英]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.