【发布时间】:2014-01-06 04:12:09
【问题描述】:
在我的应用程序中,我将一个 Arraylist 从一个活动传递到另一个活动。 FlipCardActivity 是父活动(活动 A),RecipientsActivity 是子活动(活动 B)。我使用 putExtra 将一个空的 RecipientArray (ArrayList) 从 A 传递到 B。在活动 B 中,我检查 ArrayList 的大小是否为零,如果为零,则调用另一个活动(活动 C),然后将项目添加到 arraylist 并将其返回给活动 B。在 B 中,我使用 ListView 显示项目。我在活动 B 中有一个“返回”按钮,它完成 B 并重新启动活动 A。当我再次单击 EditText 活动 B 时,活动 B 将启动。现在我仍然在 ArrayList 中有项目,但是当我将适配器设置为 ListView 以显示项目时,它会给出 NullPointerException。我无法弄清楚为什么会出现此错误,因为我在 OnActivityResult 中重复了同一段代码,但它没有给我任何错误。
这是我的代码的一部分:
在活动 A 中:
btn_rec = (ImageButton) findViewById(R.id.btn_rec);
btn_rec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent rec_Intent = new Intent(FlipCardActivity.this,
RecipientsActivity.class);
rec_Intent.putExtra("RecArray", RecipientArray);
startActivityForResult(rec_Intent, NO_OF_RECIPIENTS);
}
});
点击按钮 btn_rec 时,此处的活动 B 开始。
在活动 B 中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RecipientArray = (ArrayList<Person>) getIntent().getSerializableExtra(
"RecArray");
Log.e("Recipient Array", "size = " + RecipientArray.size());
if (RecipientArray.size() == 0) { //activity C is started here
Intent rec_addr_Intent = new Intent(RecipientsActivity.this,
RecipientAddressActivity.class);
rec_addr_Intent.putExtra("RecArray", RecipientArray);
startActivityForResult(rec_addr_Intent, REC_INFO);
} else {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
int size = prefs.getInt("size", 0);
for (int i = 0; i < size; i++) {
String json = prefs.getString("RecList_" + i, "");
Gson gson = new Gson();
Person p = gson.fromJson(json, Person.class);
RecipientArray.add(p);
}
// Log.e("RecListActivity","Size of arraylist"+RecipientArray.size());
this.m_adapter = new CustomListAdapter(RecipientsActivity.this,
R.layout.recipients_list, RecipientArray);
list = (ListView) findViewById(R.id.rec_list);
list.setAdapter(m_adapter);//I get NullPointer Exception here
}
setContentView(R.layout.activity_recipients);
addListenerForButtons();
}
...
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REC_INFO && resultCode == RESULT_OK && data != null) {
RecipientArray = (ArrayList<Person>) data
.getSerializableExtra("RecArray");
Log.e("Before for", "size = " + RecipientArray.size());
this.m_adapter = new CustomListAdapter(this,
R.layout.recipients_list, RecipientArray);
list = (ListView) findViewById(R.id.rec_list);
list.setAdapter(m_adapter);
}
与 ListView 相关的相同代码在这里。
请尽快帮助我。如果需要更多代码或 Logcat 信息,请告诉我。
Logcat 文件:
01-06 11:52:55.998: E/AddrAdctivity(1278): On Pause
01-06 11:52:56.018: E/Before for(1278): size = 1
01-06 11:52:59.251: E/In onpause(1278): Hola
01-06 11:52:59.351: E/FlipCardActivity(1278): This activity is restarted
01-06 11:52:59.351: E/FlipCardActivity(1278): Size of arraylist 1
01-06 11:53:04.907: E/In edt onclick(1278): Hello
01-06 11:53:04.967: E/FlipCardActivity(1278): This activity is paused
01-06 11:53:04.997: E/Recipient Array(1278): size = 1
01-06 11:53:05.027: E/AndroidRuntime(1278): FATAL EXCEPTION: main
01-06 11:53:05.027: E/AndroidRuntime(1278): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sample.postcare2/com.sample.postcare2.RecipientsActivity}: java.lang.NullPointerException
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.ActivityThread.access$600(ActivityThread.java:139)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.os.Looper.loop(Looper.java:154)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.ActivityThread.main(ActivityThread.java:4944)
01-06 11:53:05.027: E/AndroidRuntime(1278): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 11:53:05.027: E/AndroidRuntime(1278): at java.lang.reflect.Method.invoke(Method.java:511)
01-06 11:53:05.027: E/AndroidRuntime(1278): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-06 11:53:05.027: E/AndroidRuntime(1278): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-06 11:53:05.027: E/AndroidRuntime(1278): at dalvik.system.NativeStart.main(Native Method)
01-06 11:53:05.027: E/AndroidRuntime(1278): Caused by: java.lang.NullPointerException
01-06 11:53:05.027: E/AndroidRuntime(1278): at com.sample.postcare2.RecipientsActivity.onCreate(RecipientsActivity.java:63)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.Activity.performCreate(Activity.java:4531)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
01-06 11:53:05.027: E/AndroidRuntime(1278): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
01-06 11:53:05.027: E/AndroidRuntime(1278): ... 11 more
【问题讨论】:
-
@geet 请在上面找到logcat文件
-
recipientActivity 中的第 63 行是什么?
-
它在 list.setAdapter(m_adapter);在 Oncreate 方法中.. 我也在上面的代码中展示了它。
-
认为 setContentView 应该在 savedInstanceState 之后
-
@AstralProjection 你能看看这个问题stackoverflow.com/questions/20943651/… 并帮我解决这个问题吗?
标签: android android-listview arraylist nullpointerexception