我正在创建一个应用程序,用户可以在其中使用用户通过编辑文本框提供的输入搜索数据库。我将它们作为字符串参数传递到数据库文件中进行查询,但我遇到了错误。附加代码
这是按钮点击监听器,autoname是Autotextview
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDatabase m =new MyDatabase(getActivity());
Cursor c=m.searchname(autoname.getText().toString());
simpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.custom_layout_row, c,
new String[]{"_id", "name", "phone", "email", "subject"},
new int[]{R.id.rownumber, R.id.rowname, R.id.rowphone, R.id.rowmail, R.id.rowsubject}, 0);
listView.setAdapter(simpleCursorAdapter);
}
});
这是Mydatabase.java(数据库文件)中的代码
public Cursor searchname(String argument) {
Cursor cursor = null;
cursor = s.query("student", null, "name=?", new String[]{argument}, null, null, null);
return cursor;
}
我在查询字符串中出错
如果我运行原始查询
Cursor cursor = db.rawQuery("select * from student where name =?", new String[]{argument});
我得到这个错误:
java.lang.NullPointerException:尝试调用虚拟方法'android.database.Cursorandroid.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String,java.lang.String[])'com.techpall.miniproject.MyDatabase.searchname(MyDatabase.java:107)在com.techpall.minproject.SearchFragment$2.onClick(SearchFragment.java:71)
错误表明您正试图在null对象上运行rawQuery:)这意味着你的s为null:)在执行任何查询之前,你应该获得一个可写的数据库引用:)
所以你可以试试这个:)
public Cursor searchname(String argument) {
Cursor cursor = null;
SQLiteDatabase s = this.getWritableDatabase();
Cursor cursor = s.rawQuery("select * from student where name =?", new String[]{argument});
return cursor;
}
让我知道你是否还有这个问题:)快乐的编码伙伴:)