【问题标题】:Getting NullPointer Exception when Switching between Activities在活动之间切换时出现 NullPointer 异常
【发布时间】:2013-09-17 17:44:18
【问题描述】:

我有 3 个活动

活动1 活动2 活动3

这里是代码:

活动1:

Intent intent= new Intent(Activity1.this,Acivity2.class);
Bundle b=new Bundle();           
b.putParcelableArrayList("actionArray", (ArrayList<? extends Parcelable>) AllListArray.get(0)); 
b.putParcelableArrayList("comedyArray", (ArrayList<? extends Parcelable>) AllListArray.get(1));
intent.putExtras(b);             
startActivity(intent);

活动2:

//get the Bundle of movie category data data from previous activity
        Bundle recdData = getIntent().getExtras();

        actionArray=recdData.getParcelableArrayList("actionArray");
        comedyArray=recdData.getParcelableArrayList("comedyArray");


 public void btnClicker(View v)
    {
        Intent  i= new Intent(getApplicationContext(), Activity3.class);;
        Bundle b=new Bundle();
       switch(v.getId())//get the button label id from respective View
       { 
        case R.id.actionBtn:             
            b.putParcelableArrayList("movieCategorie", (ArrayList<? extends Parcelable>) actionArray); 
            b.putString("movieCategorieDisplay","Action Movies");
            i.putExtras(b);   
             startActivity(i);          
             break;

        case R.id.comedyBtn:
            b.putParcelableArrayList("movieCategorie", (ArrayList<? extends Parcelable>) comedyArray); 
              b.putString("movieCategorieDisplay","Comedy Movies");
            i.putExtras(b);   
             startActivity(i);
             break;

活动3:

backButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Intent i = new Intent(getBaseContext(), Acivity2.class);
                i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
                CategoryListView.this.startActivity(i);

            }
        });

问题是当我在我的 Activity3 中单击返回按钮(在移动返回按钮上)时,有时会出现 NullPionterException

Activity2中这一行的异常点

actionArray=recdData.getParcelableArrayList("actionArray");

谁能帮帮我?

【问题讨论】:

  • 将该代码放入try/catch块中,问题就解决了。
  • @pratik 将如何解决问题?
  • 它会的,因为当您切换回来时,您的数组中收到了空数据,您在那里接收的是 Bundle 数据。所以你可以在那里放置空验证,或者你需要放置 try/catch 块。所以应用程序不会崩溃并且会触发异常。

标签: android android-layout android-intent android-emulator


【解决方案1】:

这是因为捆绑包为空,所以请检查您的捆绑包null like@。

if(recdData!=null){

actionArray=recdData.getParcelableArrayList("actionArray");
 comedyArray=recdData.getParcelableArrayList("comedyArray");
}

更新

甚至在调用 Intent 时传递适当的上下文作为 Biraj Zalavadia

使用:

意图 i = new Intent(Activity3.this, Acivity2.class);

改为:

意图 i = new Intent(getBaseContext(), Acivity2.class);

【讨论】:

  • 有时我得到recData null,当BackKey被按下时。我不应该得到null,因为当用户点击这个Activity中的某个按钮时我传递给下一个Activity的recdata?如何避免null ?
【解决方案2】:

在 Activity3 中,您使用了一个 Intent 来启动 Activity2。你没有在里面放任何额外的东西。因此,当你在 Activity2 中获取 bundle 时

Bundle recdData = getIntent().getExtras();

它实际上是空的。您应该在使用前进行检查,如下所示:

Bundle recdData = getIntent().getExtras();
if(recdData != null) {
    actionArray=recdData.getParcelableArrayList("actionArray");
    comedyArray=recdData.getParcelableArrayList("comedyArray");
}

您还应该知道,使用当前导航,当您从 Activity3 启动 Activity2 时,您将不会像预期的那样拥有 actionArraycomedyArray

【讨论】:

    【解决方案3】:

    试试这个

    你得到 getBaseContext() null

    backButton.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View v) {
                    Intent i = new Intent(Activity3.this, Acivity2.class); //UPDATE HERE
                    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
                    CategoryListView.this.startActivity(i);
    
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多