我的 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希望我的应用程序运行不会崩溃。任何指导对我都有帮助。
答案 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。