使用游标读取数据库时出错
当我尝试将 readBase() 方法返回到 ArrayAdapter 时。我在管理器类中收到 NullPointerException 游标错误。
主要活动
public class Price Product Activity{
private Manager manager;
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.prise_product);
manager = new Manager(this);
spinner=(Spinner) findViewById(R.id.spinner);
spinnerAdapter();
}
@Override
protected void onResume() {
super.onResume();
manager.openBase();
}
public void spinnerAdapter(){
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,
manager.readBase());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
}
经理 public class Manager {
public Manager(Context context){
this.context = context;
helper=new Helper(context);
}
public void openBase(){
db = helper.getWritableDatabase();
}
public void insertBase(String name, Double gram){
ContentValues contentValues = new ContentValues();
contentValues.put(Constants.NAME, name);
contentValues.put(Constants.GRAM, gram);
db.insert(Constants.TABLE_NAME, null, contentValues);
}
public List<String> readBase(){
List<String> tempList = new ArrayList<>();
Cursor cursor = db.query(Constants.TABLE_NAME, null, null,
null, null, null, null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndexOrThrow
(Constants.NAME));
/*String gram = cursor.getString(cursor.getColumnIndexOrThrow
(Constants.GRAM));*/
tempList.add(name);
cursor.close();
}
return tempList;
}
}
错误代码
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at com.example.sweet.base.Manager.readBase(Manager.java:35)
对于许多人来说,答案是他们没有打开数据库。但是,我打开了数据库。
when I try to return the readBase() method to ArrayAdapter. I get a NullPointerException cursor error in the manager class.
Main Activity
public class Price Product Activity{
private Manager manager;
private Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.prise_product);
manager = new Manager(this);
spinner=(Spinner) findViewById(R.id.spinner);
spinnerAdapter();
}
@Override
protected void onResume() {
super.onResume();
manager.openBase();
}
public void spinnerAdapter(){
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,
manager.readBase());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
}
Manager
public class Manager {
public Manager(Context context){
this.context = context;
helper=new Helper(context);
}
public void openBase(){
db = helper.getWritableDatabase();
}
public void insertBase(String name, Double gram){
ContentValues contentValues = new ContentValues();
contentValues.put(Constants.NAME, name);
contentValues.put(Constants.GRAM, gram);
db.insert(Constants.TABLE_NAME, null, contentValues);
}
public List<String> readBase(){
List<String> tempList = new ArrayList<>();
Cursor cursor = db.query(Constants.TABLE_NAME, null, null,
null, null, null, null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndexOrThrow
(Constants.NAME));
/*String gram = cursor.getString(cursor.getColumnIndexOrThrow
(Constants.GRAM));*/
tempList.add(name);
cursor.close();
}
return tempList;
}
}
error code
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference
at com.example.sweet.base.Manager.readBase(Manager.java:35)
For many, the answer is that they have not opened the database. However, I opened the db.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题出在这一行 Cursor 游标 = db.query(Constants.TABLE_NAME, null, null, null, null, null, null);你必须从数据库读取数据并存储在游标中..但是你正在通过游标设置数据
problem is in this line Cursor cursor = db.query(Constants.TABLE_NAME, null, null, null, null, null, null); you have to read data from database and store in cursor .. but you are setting data by cursor