我试图在两个活动之间发送一个字符串数组。 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
中提取的arrayListArrayList 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);
}
});
我很困惑,当元素被清楚地初始化时,我怎么能得到一个空指针,任何帮助都是值得赞赏的。
请在标记为重复之前阅读所有这些内容,我一直在寻找这个问题的解决方案,并且没有找到类似的主题。
谢谢!
答案 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);
}
});
}
希望这会有所帮助〜