使用游标读取数据库时出错

发布于 2025-01-11 21:31:10 字数 2375 浏览 2 评论 0原文

当我尝试将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

站稳脚跟 2025-01-18 21:31:10

问题出在这一行 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;
}

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

     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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文