【问题标题】:Receive ArraylistObject getParcelableExtra - NullPointerException接收 ArraylistObject getParcelableExtra - NullPointerException
【发布时间】:2014-08-05 07:07:11
【问题描述】:

我无法弄清楚如何在 android 中的两个类别之间发送和接收以及 arraylist-object。我在活动 B 中得到一个 NullPointerException。

活动 A

 private ArrayList <String[][]> stringObjects2D = new ArrayList <String[][]> () ; 
 Intent intent = new Intent(MainActivity.this, CalculationsActivity.class); 
 intent.putExtra("strObj2D", stringObjects2D );

活动 B

 private ArrayList <String[][]> stringObjects2D;
 stringObjects2D = getIntent().getParcelableExtra("strObj2D");

 // just a check test if something is here. Here I get the NullPointerException
 System.out.println("size = " + stringObjects2D.size());

如果有人知道如何解决这个问题,那就太好了。

谢谢!!!

【问题讨论】:

    标签: android android-intent android-activity nullpointerexception


    【解决方案1】:

    原因是String[][] 不是 Parcelable。请改用ArrayList&lt;ArrayList&lt;String&gt;&gt;

    如果您认为嵌套类型太长,您也可以实现自己的 Parcelable 类来存储这些数据。检查此question 了解实施细节。

    【讨论】:

      【解决方案2】:

      您可以创建一个实现Parcelable 的类,并使用该类传递给意图,以确保您传递的是parcelable object

      样本:

      更新:

          public class Sample implements Serializable {
          private ArrayList<String[][]> stringObjects2D; 
          public Sample() {
                          stringObjects2D = new ArrayList <String[][]> ();
              String [][] s = {{"1","1"},{"1","1"},{"1","1"},{"1","1"},{"1","1"}};
              stringObjects2D.add(s);
              stringObjects2D.add(s);
              stringObjects2D.add(s);
              stringObjects2D.add(s);
          }
          public ArrayList <String[][]> getArray(){
              return this.stringObjects2D;
          }
      

      }

      用于:

      Sample s2 = new Sample();
              Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
              intent.putExtra("strObj2D", s2);
              startActivity(intent);
      

      第二个活动:

       Sample stringObjects2D;
           stringObjects2D = (Sample) getIntent().getSerializableExtra("strObj2D");
      
           // just a check test if something is here. Here I get the NullPointerException
           System.out.println("size = " + stringObjects2D.getArray().get(0)[0]);
      

      【讨论】:

      • 好的,谢谢,我会在适当的时候研究一下,也许会接受。
      • 我用你的例子试过了,结果完全一样。我忘了提到我可以像你一样早些获得数组列表的大小,但不能取消引用它(获得一个单独的值)。相同的异常:ClassCastException(从 Object[] 到 String[][])。我尝试了以下方法: **System.out.println("array = " + stringObjects2D.getArray().get(1)[0]); **
      【解决方案3】:

      使用

      stringObjects2D = (ArrayList<String[][]>) getIntent().getSerializableExtra("strObj2D");
      

      改为

      stringObjects2D = getIntent().getParcelableExtra("strObj2D");
      

      【讨论】:

      • 我昨天试过了 - 坐了几个小时没有解决它。如果我使用 getSerializableExtra 我会得到一个 ClassCastExecption (不能从对象转换为字符串)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2022-08-18
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多