當我嘗試將 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 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)
對于許多人來說,答案是他們還沒有打開資料庫。但是,我打開了資料庫。
uj5u.com熱心網友回復:
問題出在這一行 Cursor cursor = db.query(Constants.TABLE_NAME, null, null, null, null, null, null); 您必須從資料庫中讀取資料并存盤在游標中..但是您正在通過游標設定資料
public void Cursor dsiplayData() {
SQLiteDatabase sqLiteDatabase = openBase()
return sqLiteDatabase.rawQuery("SELECT * FROM TABLE_NAME ", null)
}
public List<String> readBase(){
List<String> tempList = new ArrayList<>();
Cursor cursor = dsiplayData()
while (cursor.moveToNext()){
String name = cursor.getString(0); //if you want to read mode data from database you have to create a data model class
tempList.add(name);
cursor.close();
}
return tempList;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/438433.html
