Java 在Android中使用意图时出现空指针异常

Java 在Android中使用意图时出现空指针异常,java,android,Java,Android,我有一个关于意图的问题 甲级 Intent i=new Intent(getApplicationContext(),JobOffer.class); i.putExtra("From",aryListBean.get(arg2).getUser()); i.putExtra("StartDate",aryListBean.get(arg2).getStartDate()); i.putExtra("DueDate",aryListBean.get(arg2).getEndDate()); st

我有一个关于意图的问题

甲级

Intent i=new Intent(getApplicationContext(),JobOffer.class);
i.putExtra("From",aryListBean.get(arg2).getUser());
i.putExtra("StartDate",aryListBean.get(arg2).getStartDate());
i.putExtra("DueDate",aryListBean.get(arg2).getEndDate());
startActivity(i);
B类

 Bundle b=getIntent().getExtras();
      String user=b.getString("From");
      String startdate=b.getString("StartDate");
      String duedate=b.getString("DueDate");
      ArrayList<String> hr_offerdet=b.getStringArrayList("AryHrOffer");

    tvUser.setText("   "+user);
    tvStarDate.setText("   "+startdate);
    tvDueDate.setText("   "+duedate);
Bundle b=getIntent().getExtras();
String user=b.getString(“From”);
String startdate=b.getString(“startdate”);
字符串duedate=b.getString(“duedate”);
ArrayList hr_offerNet=b.getStringArrayList(“AryHrOffer”);
tvUser.setText(“+user”);
tvStarDate.setText(“+startdate”);
tvDueDate.setText(“+duedate”);
C类:返回B类按钮


现在,我已经成功地将数据发送到类A到类B。我将数据发送到类B。现在,当我从类B移动到类C,然后再次返回到类B时,出现了Nullpointer异常。你有什么不同的方法来解决这个问题吗?请帮助您必须检查
bundle
是否为
null

if(b!=null){

 // your code

}

您必须检查
bundle
是否为
null

if(b!=null){

 // your code

}

在代码中,您无法通过带有键“AryHrOffer”的arraylist

此外,您应该始终首先检查捆绑包是否存在

例如,
如果(b!=null){/…}

然后,所有需要打开活动B的类都应该传递所需的参数(如果它们确实是必需的),否则如果bundle为null则忽略

编辑:

在重读你的问题之后,我注意到你说 “。然后,再次返回到类B,出现空指针异常”


问题可能不是有意传递额外信息,而是在您的活动B的简历中出现了一些信息。

在您的代码中,您无法通过带有键“AryHrOffer”的arraylist

此外,您应该始终首先检查捆绑包是否存在

例如,
如果(b!=null){/…}

然后,所有需要打开活动B的类都应该传递所需的参数(如果它们确实是必需的),否则如果bundle为null则忽略

编辑:

在重读你的问题之后,我注意到你说 “。然后,再次返回到类B,出现空指针异常”


问题可能不是有意传递额外信息,而是活动B的简历上的内容。

首先:请提供logcat,以及您在哪个指令上有空指针

你必须检查这些东西:

if (getIntent() != null && getIntent().getExtras() != null) {
    Bundle b = getIntent().getExtras();
    String user = b.getString("From");
    String startdate = b.getString("StartDate");
    String duedate = b.getString("DueDate");
    ArrayList < String > hr_offerdet = b.getStringArrayList("AryHrOffer");

    tvUser.setText("   " + user);
    tvStarDate.setText("   " + startdate);
    tvDueDate.setText("   " + duedate);
}
if(getIntent()!=null&&getIntent().getExtras()!=null){
Bundle b=getIntent().getExtras();
String user=b.getString(“From”);
String startdate=b.getString(“startdate”);
字符串duedate=b.getString(“duedate”);
ArrayListhr_offerNet=b.getStringArrayList(“AryHrOffer”);
tvUser.setText(“+user”);
tvStarDate.setText(“+startdate”);
tvDueDate.setText(“+duedate”);
}

首先:请提供logcat以及哪一条指令上有空指针

你必须检查这些东西:

if (getIntent() != null && getIntent().getExtras() != null) {
    Bundle b = getIntent().getExtras();
    String user = b.getString("From");
    String startdate = b.getString("StartDate");
    String duedate = b.getString("DueDate");
    ArrayList < String > hr_offerdet = b.getStringArrayList("AryHrOffer");

    tvUser.setText("   " + user);
    tvStarDate.setText("   " + startdate);
    tvDueDate.setText("   " + duedate);
}
if(getIntent()!=null&&getIntent().getExtras()!=null){
Bundle b=getIntent().getExtras();
String user=b.getString(“From”);
String startdate=b.getString(“startdate”);
字符串duedate=b.getString(“duedate”);
ArrayListhr_offerNet=b.getStringArrayList(“AryHrOffer”);
tvUser.setText(“+user”);
tvStarDate.setText(“+startdate”);
tvDueDate.setText(“+duedate”);
}

当您从C返回到B时,该绑定为空。您必须设置条件您可以将此数据保存在共享首选项中,然后在需要时重用它例如,如果您对意图感到困惑…B是否仍在运行并拥有所有数据?当您需要从C到B的数据时,请使用Resultent。@Daler难道您不同意以XML格式(冗余!)在生命周期(写入周期)有限的闪存文件系统上存储某些内容与Android在内存中传递意图附加项的良好工作方式相比是一种资源浪费吗?当然,几乎每个应用程序都使用SharedReference,但希望不要将非持久性数据从一个活动传递到另一个活动。每个工具都有自己的域,SharedReferences不是在活动之间传递临时应用程序状态数据的正确工具。@Daler谢谢。在API 9中,除了
commit()
之外,还引入了
SharedReferences.Editor.apply()
,这是有原因的。虽然功能相同,
apply()
会自动在后台运行,这样主/UI线程就不会被写操作阻塞。我想当时很多人已经开始广泛使用共享参考资料了……;)当您从C返回到B时,该Bundle为null。您必须设置条件您可以将此数据保存在共享首选项中,然后在需要时重用它例如,如果您对意图感到困惑…B是否仍在运行并拥有所有数据?当您需要从C到B的数据时,请使用Resultent。@Daler难道您不同意以XML格式(冗余!)在生命周期(写入周期)有限的闪存文件系统上存储某些内容与Android在内存中传递意图附加项的良好工作方式相比是一种资源浪费吗?当然,几乎每个应用程序都使用SharedReference,但希望不要将非持久性数据从一个活动传递到另一个活动。每个工具都有自己的域,SharedReferences不是在活动之间传递临时应用程序状态数据的正确工具。@Daler谢谢。在API 9中,除了
commit()
之外,还引入了
SharedReferences.Editor.apply()
,这是有原因的。虽然功能相同,
apply()
会自动在后台运行,这样主/UI线程就不会被写操作阻塞。我想当时很多人已经开始广泛使用共享参考资料了……;)谁告诉过你,如果避免了例外,原始海报会很高兴?你不认为他会想要手头有他的意图数据吗?谁告诉你,如果避免了例外,原始海报会很高兴?你不认为他会想要他的