【问题标题】:Not able to deduce why NullPointerException occurs at one part of code and not in the other无法推断为什么 NullPointerException 发生在代码的一部分而不是另一部分
【发布时间】: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


【解决方案1】:

你在做

 list = (ListView) findViewById(R.id.rec_list);

在你做之前

setContentView(R.layout.activity_recipients);

请把 setContentView 移到第一行,否则 findViewById 找不到任何东西,这就是你得到空指针的原因

【讨论】:

  • 宾果游戏!我们有同样的想法!
  • @Carlos Robles 非常感谢!错过了这个简单的事情。
  • @CarlosRobles 嘿,我还有一个问题要解决。请您看看这个问题stackoverflow.com/questions/20943651/… 并帮助我解决它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 2016-12-07
相关资源
最近更新 更多