Android如何将EditText输入字符串存入数组 元素为null修复
Android点击按钮追加EditText内容到数组显示null修复方案
问题根因
- 循环逻辑完全无效:代码中for循环初始值为
i = mCounter-1,循环判断条件写为i > mCounter,该条件永远无法成立,赋值逻辑从未执行,数组元素全部为引用类型默认值null。 - 数组作用域错误:数组被定义在按钮点击事件内部,每次点击都会创建一个全新的空数组,之前保存的输入内容会被直接回收,无法实现累加存储。
- 冗余性能消耗:所有
findViewById视图绑定操作都写在点击事件中,每次点击都会重复执行绑定逻辑,完全没有必要。
修复方案
- 将存储输入内容的数组、计数器定义为Activity类的成员变量,保证多次点击之间数据可以留存。
- 删除无效的for循环,每次点击时先对数组做扩容处理,再将新获取的输入内容存入数组的最后一位。
- 将所有视图绑定操作移到
onCreate生命周期方法中,仅执行一次绑定即可。 - 增加输入判空逻辑,避免存入空字符串。
修复后完整代码
package com.example.addarray; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.util.Arrays; public class MainActivity extends AppCompatActivity { private Button button; private EditText editText; private int mCounter = 0; private TextView textView; private TextView textView2; private TextView textView3; // 数组定义为成员变量,全局留存数据 private String[] contentArray = new String[0]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 仅在onCreate中绑定一次视图 button = findViewById(R.id.button); textView = findViewById(R.id.textView1); textView2 = findViewById(R.id.textView2); textView3 = findViewById(R.id.textView3); editText = findViewById(R.id.editText); button.setOnClickListener(view -> { String input = editText.getText().toString().trim(); if (input.isEmpty()) { textView3.setText("请输入有效内容"); return; } mCounter++; textView.setText(String.valueOf(mCounter)); // 数组扩容1位用于存储新内容 contentArray = Arrays.copyOf(contentArray, mCounter); contentArray[mCounter - 1] = input; // 展示数组内容 textView2.setText(Arrays.toString(contentArray)); textView3.setText("本次输入:" + input); // 清空输入框 editText.setText(""); }); } }
优化建议
如果不需要固定使用数组,推荐直接用ArrayList<String>实现动态存储,无需手动维护数组长度和计数器,代码更简洁不易出错:
// 成员变量替换为ArrayList private ArrayList<String> contentList = new ArrayList<>(); // 点击事件中添加逻辑替换为 contentList.add(input); textView2.setText(contentList.toString()); textView.setText(String.valueOf(contentList.size()));
修复前异常运行效果:
内容的提问来源于stack exchange,提问作者Wong Capricornus
相关产品推荐
相关产品推荐


