如何解决空指针引用错误首次安装时间

时间:2017-12-03 09:29:55

标签: android sqlite

我的 dbhelper.java 有方法

public Cursor report(){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery("SELECT * FROM Employees", null);
    return c;
}

Mainactivity.java

private List<Front1> viewReport(){

    List<Front1> employeeList1 = new ArrayList<>();

    Cursor c = db.report();

if (c != null && c.getCount() > 0) {         // Add the addition condition
if (c.moveToFirst()) {
    do{
        String ids=c.getString(c.getColumnIndex("e_ids"));
        String name=c.getString(c.getColumnIndex("e_name"));


        Front1 front1=new Front1(ids,name1);
       employeeList1.add(front1);

    }while (c.moveToNext());}


}else{ 

Front1 front1=new Front1("101","suran");
       employeeList1.add(front1);

 }

我有员工table.first时间应用程序安装我的表空了所以应用程序崩溃。如果我添加dumny数据停止应用程序崩溃但用户删除虚拟数据再次应用程序crash.how解决空对象引用初始阶段.it mean select statement如果结果集为空,则使用.i希望我的应用程序运行不会崩溃。任何指导对我都有帮助。

2 个答案:

答案 0 :(得分:0)

如果表为空,Cursor不返回null,则应使用getCount()函数来解决问题。您的代码应如下所示:

if (c != null && c.getCount() > 0) {         // Add the addition condition
    if (c.moveToFirst()) {
        do{
            String ids=c.getString(c.getColumnIndex("e_ids"));
            String name=c.getString(c.getColumnIndex("e_name"));


            Front1 front1=new Front1(ids,name1);
           employeeList1.add(front1);

        }while (c.moveToNext());}


}

答案 1 :(得分:0)

您的问题是不会从查询返回null Cursor。而在没有提取数据的情况下,Cursor将为空。

可以使用Cursor getCount()方法检查。但是,通过检查移动的返回值(真或假)可以很容易地检查它。 moveToNext之类的方法。 MoveToNext也可用于遍历while循环中的多个行。因此,也许最简单的解决方案是使用: -

if (c.moveToNext()) {
    String ids=c.getString(c.getColumnIndex("e_ids"));
    String name=c.getString(c.getColumnIndex("e_name"));
    Front1 front1=new Front1(ids,name1);
    employeeList1.add(front1);
}

显然你可能需要检查返回List的大小,因为它的大小可能是0。