由于Id错误,java无法获取文本
我试图解决这个问题已经有一段时间了,但似乎不起作用。我在下面的代码块中的这一行school.setClasses(classesName.getText().toString());
上得到一个空指针异常
这是实际发布到SQLite数据库的代码
public void postSchoolSetuptoSQLite() {
school.setSchoolName(nameOfSchool.getText().toString());
school.setSchoolLocation(schoolLocation.getText().toString());
school.setClasses(classesName.getText().toString());
academeaSQL.addSchool(school);
if (demeaSQL != null) {
StringBuilder sb = new StringBuilder();
for (School s : demeaSQL.getAllSchools()) {
sb.append(" SchoolName= " + s.getSchoolName() + " SchoolLocation= " + s.getSchoolLocation()
+ " ClassName= " + s.getClasses());
sb.append("\n");
}
Log.i("Database content", sb.toString());
Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_LONG).show();
} else {
Log.i("Database Err", "Database Error");
}
}
我通过此onAddField方法单击“添加新类”按钮,动态创建classesName的字段
public void onAddField(View v) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.field, null);
rowView.setId(ViewIdGenerator.generateViewId());
// Add the new row before the add field button.
parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);
Log.i("ids", String.valueOf(rowView.getId()));
}
字段Id是通过ViewIdGenerator类动态生成的
从该代码块中动态创建的字段获取ID时,错误出现在此时classesName = rowView.findViewById(rowView.getId());
public void findByIds() {
rowView = new View(this);
parentLinearLayout = findViewById(R.id.parent_linear_layout);
nameOfSchool = findViewById(R.id.nameOfSchool);
schoolLocation = findViewById(R.id.schoolLocation);
addSchoolAndMoveNext = findViewById(R.id.addSchoolAndMoveNext);
classesName = rowView.findViewById(rowView.getId());
Log.i("Classname", String.valueOf(classesName));
Log.i("SchoolLoca", String.valueOf(schoolLocation));
}
这里是我调用findByIds();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_school_search_setup);
findByIds();
intitializeListeners();
initializeObjects();
}
对于空指针异常。错误指向这些区域
school.setClasses(classesName.getText().toString());
及
classesName = rowView.findViewById(rowView.getId());
请说明为什么会出现nullpointer异常,以及如何解决它。非常感谢。我将非常感谢你的回答
# 1 楼答案
您的问题是,如果您在
onCreate()
内调用findByIds()
,那么rowView.getId()
将返回null,因为您在按下按钮后在默认id生成器中设置idonCreate()
在活动首次启动时被调用当你点击按钮时,看起来你正在尝试添加一个类列表。在Android中,有一些内置的方法可以实现这一点,它们的开销比你正在做的事情要大一些(就实现所需的时间而言),但在滚动、添加新类、删除类等方面,它们将更加可靠
为了做到这一点,查看recyclerview
在RecyclerView部分的显示光标内容的内部here将向您展示如何将数据库中的数据添加到RecyclerView