尝试通过意图调用新活动时收到错误消息:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
我的活动有一个按钮,单击后会转到此方法:
public void onClickChangeActivity() {
Intent intent = new Intent(context , Details.class);
startActivity(intent);
}
公共静态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();
}
};
清单文件:
package="com.test.akash.android_test">
android:minSdkVersion="16"
android:targetSdkVersion="21" />
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
android:name=".Crime"
android:label="@string/title_activity_crime"
android:screenOrientation="portrait">
android:name=".RecyclerViewActivity"
android:label="@string/title_activity_recycler_view"
android:screenOrientation="portrait">
android:name=".Details"
android:label="@string/title_activity_crime_details"
android:parentActivityName=".RecyclerViewActivity">
android:name="android.support.PARENT_ACTIVITY"
android:value="RecyclerViewActivity" />
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.(ComponentName.java:77)
at android.content.Intent.(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)
您是否尝试过onClickChangeActivity(context)?
使用Intent intent = new Intent(RecyclerViewActivity.this,Details.class); 如果可行,则变量上下文需要是最终变量,并像onClickChangeActivity(context)一样使用
尝试使用context = this;
@圣地亚哥只是尝试了,虽然同样的错误。
@JonathanGarca刚才也尝试过,同样的错误。
粘贴您的活动代码和清单
OK @AkashMagoon发布调用onClickChangeActivity方法的方法,也许您的按钮未正确声明
@圣地亚哥它不是按钮,而是通过我编写的RecyclerView创建的卡片列表。 卡已正确声明,并且onClickChangeActivity被击中(我将日志放入其中进行检查。)
@Santiago Ive在上面添加了我的听众
@OfirOhayon清单在上面。 谢谢!
检查我的答案,告诉我是否可行。
问题是您试图从适配器调用活动方法:
RecyclerViewActivity recyclerViewActivity = new RecyclerViewActivity();
recyclerViewActivity.onClickChangeActivity();
您应该在适配器类中替换此代码。在适配器构造函数中,添加以下行:
public RecycleViewAdapter(......, Context context){
...your code.
this.mContext=context;
}
并在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。
我试过了我收到此错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法java.lang.String android.content.Context.getPackageName()
某些未正确初始化的内容。把你的logcat
请看上面
请参阅上方的我的编辑回复。
为此,我需要将onClickChangeActivty设为静态?
不,请检查上面的最后一个编辑答案。我希望这可以解决您的问题。
此编辑仍未消除错误!
您是否要将Context从Activity传递到Adapter,然后使用此Context调用Adapter上的方法来调用Activity上的方法?请,您可以发布您的更新代码吗?
尝试这个:
Intent intent = new Intent(RecyclerViewActivity.this , Details.class);
startActivity(intent);
使用RecyclerViewActivity.this代替context
这确实应该起作用。您不需要ApplicationContext,因为每个Activity都是上下文本身。因此,RecyclerViewActivity.this应该起作用。
我试过了我收到此错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法java.lang.String android.content.Context.getPackageName()
你能放你的logcat吗?
Logcat发布在上面!
您没有定义详细信息活动!!
解:
在适配器类中,创建一个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;
}
这就是我得到空指针异常的原因。由于某种原因,我创建了带有上下文的构造函数,context仍然为null。在上述类中实例化上下文就可以了!感谢所有回答。
您正在尝试启动Details.class-
但我在您的清单中找不到对此活动的任何引用。
请加
根据您的清单,确保"详细信息"扩展了"活动"。
我的班级名称曾经是CrimeDetails,但是后来我将其更改为Details而不更改清单。但是只是将其更改为.Details,但仍然无法正常工作。仍然出现相同的错误。