ArrayList通过intent null指针传递

时间:2017-04-18 03:56:05

标签: android nullpointerexception

我试图在两个活动之间发送一个字符串数组。 arrayList在两个活动中都清楚地初始化,然后设置为等于从getIntent拉出的arrayList。

这是第一个活动相关代码:

ArrayList elements = new ArrayList<String>(); // initialize elements
初始化

元素,然后将其发送到addElement

addElementButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent toAddElement = new Intent(NewRemote.this, addElement.class);
    toAddElement.putStringArrayListExtra("element_list", elements);
    startActivity(toAddElement);
    }
});

然后在addElement中初始化元素,然后将其设置为等于从intent

中提取的arrayList
ArrayList elements = new ArrayList<String>();
Intent getElements = getIntent();
elements = getElements.getStringArrayListExtra("element_list");

我在稍后稍稍调用它时会在elements.add()上获得一个空指针

        addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            elements.add(selectedElement);
            Intent toNewRemote = new Intent(addElement.this, NewRemote.class);
            toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote
            startActivity(toNewRemote);
        }
    });

我很困惑,当元素被清楚地初始化时,我怎么能得到一个空指针,任何帮助都是值得赞赏的。

请在标记为重复之前阅读所有这些内容,我一直在寻找这个问题的解决方案,并且没有找到类似的主题。

谢谢!

3 个答案:

答案 0 :(得分:1)

您的代码有些奇怪。

ArrayList elements = new ArrayList<String>();
Intent getElements = getIntent();
elements = getElements.getStringArrayListExtra("element_list");
....
addButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        elements.add(selectedElement);
        Intent toNewRemote = new Intent(addElement.this, NewRemote.class);
        toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote
        startActivity(toNewRemote);
    }
});

这里你在内部函数中使用了elements。但你没有把它定义为最终! 我想elements函数中的onClick引用了另一个未初始化的数组。

答案 1 :(得分:0)

首先,您不需要在执行时初始化ArrayList

ArrayList elements = new ArrayList<String>();

因为它将通过意图收到的列表引用

elements = getElements.getStringArrayListExtra("element_list");

尝试下面正在运行和测试的代码。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    Intent getElements = getIntent();
    final ArrayList elements = getElements.getStringArrayListExtra("element_list");

    findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            elements.add("selected element");
            Intent toNewRemote = new Intent(addElement.this, NewRemote.class);
            toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote
            startActivity(toNewRemote);
        }
    });

}

答案 2 :(得分:0)

而不是使用final声明elements作为global

试试这个:

ArrayList elements;
.......
.................

@Override
protected void onCreate(Bundle savedInstanceState) {

    elements = new ArrayList<String>();

    Intent getElements = getIntent();
    elements = getElements.getStringArrayListExtra("element_list");

    ........ 
    .................

    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            elements.add(selectedElement);
            Intent toNewRemote = new Intent(addElement.this, NewRemote.class);
            toNewRemote.putStringArrayListExtra(ELEMENT_LIST, elements); // send elements to newRemote
            startActivity(toNewRemote);
        }
    });
}

希望这会有所帮助〜