【发布时间】:2018-01-23 06:51:21
【问题描述】:
我一直在尝试解决这个问题,但似乎没有用。我在下面的代码块中的这一行 school.setClasses(classesName.getText().toString()); 上得到了一个 nullPointer 异常。
哪些是实际发布到 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类动态生成的。
此时的错误是classesName = rowView.findViewById(rowView.getId()); 从该代码块中动态创建的字段中获取 Id 时
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();
}
对于 Nullpointer 异常。错误指向这些区域
school.setClasses(classesName.getText().toString());
和
classesName = rowView.findViewById(rowView.getId());
请问为什么我会收到空指针异常以及如何解决它。谢谢你。非常感谢您的回复。
【问题讨论】:
-
你在哪里/何时打电话给
findByIds()? -
您说错误出现在两个不同的地方...是哪一个? NullPointerExceptions 也很容易解决,尤其是使用调试器。如果掌握了这个强大的工具,你就不需要我们的帮助了。
-
尝试实现这样的东西。 stackoverflow.com/questions/45017297/…
-
好的@Rafa谢谢你的回复我真的很感激你和你一样我在默认的oncreate方法上调用findByIds。让我编辑问题以显示通话。
-
@Sam 这里的错误在“school.setClasses(classesName.getText().toString());”行中和'classesName = rowView.findViewById(rowView.getId());'我将编辑我的问题以明确这一点