![](/img/trans.png)
[英]app crash with android.content.Context.getPackageName()' on a null object reference
[英]android.content.Context.getPackageName() on a null object reference
從片段轉換到活動時出現此錯誤,如下所示:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at android.content.ComponentName.<init>(ComponentName.java:130) at android.content.Intent.<init>(Intent.java:6108)
下面是我進入下一個活動的代碼,錯誤發生在下面代碼的第一行。
Intent mainIntent = new Intent (getContext(), MainActivity.class);
mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity (mainIntent);
到目前為止,我在網上沒有看到任何解決方案。
似乎你得到了一個錯誤的上下文,引發了這個NullPointerException
嘗試替換以下行:
Intent mainIntent = new Intent (getContext(), MainActivity.class);
與:>>如果您在活動中
Intent mainIntent = new Intent (this, MainActivity.class);
與:>>如果您在活動中的回調偵聽器中
Intent mainIntent = new Intent (MyActivityName.this, MainActivity.class);
與:>>如果你在一個片段內
Intent mainIntent = new Intent (requireActivity(), MainActivity.class);
請嘗試使用 getContext() 的 getActivity() intsead
我使用此代碼處理片段的事務
private Context context;
context.startActivity(new Intent(context, MainActivity.class));
我已經能夠找到解決這個問題的方法。 我意識到我收到了錯誤,因為我正在 firebase OnCompleteListener 中創建新 Intent,如下所示。 所以在我從監聽器內部刪除它並在外面調用它之后,我的程序可以正常工作。
相反,我創建了一個全局 boolean 變量,我在成功存儲數據時將其更新為 true。 然后我可以在其他地方訪問它,然后如果為真則轉換到另一個地方。
#BEFORE
PostsRef.child(key).updateChildren(postsMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(getActivity(), "New Post is updated successfully.", Toast.LENGTH_SHORT).show();
Intent mainIntent = new Intent (getActivity(), MainActivity.class);
mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity (mainIntent);
} else {
Toast.makeText(context, "Error occured while updating your post.", Toast.LENGTH_SHORT).show();
}
}
});
#AFTER
PostsRef.child(key).updateChildren(postsMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mSuccess = true;
Toast.makeText(getActivity(), "New Post is updated successfully.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Error occured while updating your post.", Toast.LENGTH_SHORT).show();
}
}
});
大家好,我也意識到這個錯誤的主要原因之一是生命周期方法。所以我在我的片段中覆蓋它們以更新 firebase 數據庫上的用戶 state。 因此,每當我嘗試轉到管理它的主要活動時,它們android.content.Context.getPackageName() on a null object reference
錯誤。 如果我使用片段轉換移動到另一個片段,則 MainActivity 將被執行兩次以上。 停止覆蓋它們后,我的應用程序正常工作。 如果有人能解釋為什么會發生這種情況,那就太好了。
@Override
public void onStart() {
super.onStart();
updateUserState("Online");
}
@Override
public void onResume() {
super.onResume();
updateUserState("Online");
}
由於您是從Fragment調用的,因此您應該在此處使用getActivity()而不是 getContext()
Intent mainIntent = new Intent (getActivity(), MainActivity.class);
mainIntent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity (mainIntent);
我希望這應該會有所幫助。
有時 startActivity 方法會拋出一個異常,例如:
從 Activity 上下文外部調用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 標志。 這真的是你想要的嗎?
所以你應該intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.