gpt4 book ai didi

java - 新的 startActivity 期间 Log.i 上出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 13:16:52 26 4
gpt4 key购买 nike

我对一个变量有疑问。登录后,我从数据库中获取一些数据,以填充我的 listView。

一切正常,但在我的 AsyncTask 结束时,我调用了一个名为set_tour_id 将 id 保存在我的类的私有(private)变量上(称为 asynctask)。

像这样,我可以将此变量放入 Intent 中,因为我想在其他 Activity 上获取它。

但是在activity.putExtra之后我的Log.i上有一个nullPointerException,而我知道我的私有(private)变量tour_id不为空,因为我放置了该变量的另一个Log.i,并且我有要发送的数据。

所以这是 OnPostExecute 中我的 AsyncTask 的结尾,变量 this.lcp 是我的类的变量,其中包含方法:

try {
if(json_data.has("tour_id")){

tour_id = json_data.getString("tour_id");
this.lcp.set_tour_id(tour_id);
Log.i("OnPostExecute -> after setAdapter -> tour_id ", tour_id);

}else{
Log.i("json_data of tour_id", "don't exist");
}

} catch (JSONException e) {
e.printStackTrace();
}

这里没有困难..这是我的方法set_tour_id:

public void set_tour_id(String new_tour_id){
this.tour_id = new_tour_id;
Log.i("ListCrossingPoint_tour_id", this.tour_id);
}

在这里,我在 LogCat 中有我的tour_id,所以通常一切正常。

这是方法onOptionItemSelect(MenuItem Item):

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_tour_inf:
Intent activiteT = new Intent(ListCrossingPoint.this, InfoTour.class);
activiteT.putExtra("tour_id", this.tour_id);
Log.i("tour id OnClickItemSelected", this.tour_id);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
my error appear just here (on the top :-) )

startActivity(activiteT);
return true;
default:
return super.onOptionsItemSelected(item);
}
}

所以我的错误就在这里,而我的变量tour_id中有一些东西..我不明白为什么..

这是 LogCat:

03-14 08:38:00.947: E/AndroidRuntime(1225): FATAL EXCEPTION: main
03-14 08:38:00.947: E/AndroidRuntime(1225): java.lang.NullPointerException: println needs a message
03-14 08:38:00.947: E/AndroidRuntime(1225): at android.util.Log.println_native(Native Method)
03-14 08:38:00.947: E/AndroidRuntime(1225): at android.util.Log.i(Log.java:159)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.listpoint.ListCrossingPoint.onOptionsItemSelected(ListCrossingPoint.java:263)
03-14 08:38:00.947: E/AndroidRuntime(1225): at android.app.Activity.onMenuItemSelected(Activity.java:2534)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:958)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:514)
03-14 08:38:00.947: E/AndroidRuntime(1225): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:99)
....

编辑1:当我的异步任务是芬兰语时,这是我的LOGCAT:

03-14 09:17:13.691: I/AsyncTaskListCrossingPoint(1351): onPostExecute
03-14 09:17:13.699: I/JARRAY(1351): [{"zip_code":"21500","tel":"03 80 91 54 54","end_hour":"18:00:00","type":"Collection","city":"Montbard","id":"1","closed_client":nul l,"factory_id":"1","infos":"depose st geosmes","waste_adr":"Foyer mutualiste de montbard 207 rue charles de gaulle","name":"Dupond","no_waste":null,"tour_id":"1","begin_hour":"08:00:00","internal_erro r":null,"fax":"03 80 91 54 60","collector_id":"1","status":"0","img_path":null,"producer_id":"1","adress":"Foyer mutualiste de montbard 207 rue charles de gaulle","waste_code":"21500","miscellaneous":"Mme loiseau cadre de sante","downtime":"2","id_erp":"C10018- 1","email":"Dupond.patrick@gmail.com","sequence":"1","siret":"732 829 320 00074"}
03-14 09:17:13.699: I/OnPostExecute -> after setAdapter -> tour_id(1351): id :1

编辑2:我将日志放在每个步骤上以向您展示,我的变量已填充,直到调用方法set_tour_id,并且当我启动新 Activity 时,id 为空o_o:

03-14 09:41:31.631: I/JARRAY: [{"waste_adr":"Foyer mutualiste de montbard 207 rue charles de gaulle","name":"Dupond","no_waste":null,"tour_id":"1"}]
03-14 09:41:31.631: I/ListCrossingPoint --> set_tour_id(String new_tour_id) -> tour_id: id :1
03-14 09:41:31.631: I/Asynctask -> OnPostExecute -> after set_tour_id -> tour_id: id :1
03-14 09:42:06.987: I/ListCrossingPoint --> OnClickItemSelected -> tour_id: id :null
03-14 09:42:06.987: I/ActivityManager(300): START {cmp=com.main/com.infotour.InfoTour (has extras) u=0} from pid 1481

最佳答案

您在其中设置 tour_id

this.lcp 似乎引用了某些其他对象,并且您的 Activity 中的 tour_id 未设置。将 this.tour_id 更改为 this.lcp.tour_id 可能会有所帮助。无论如何,要么

  • tour_id 尚未设置(毕竟这是一个异步任务),或者
  • 您设置的tour_id是不同的tour_id

正如您所观察到的,尝试记录 null 消息会导致此 NPE。如果有时可以合法地记录 null 消息,则可以使用 Hariharan 的方法来防止 NPE。否则只是治标不治本。

关于java - 新的 startActivity 期间 Log.i 上出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22400296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com