Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果光标为空或null,如何继续_Android_Sqlite_Cursor - Fatal编程技术网

Android 如果光标为空或null,如何继续

Android 如果光标为空或null,如何继续,android,sqlite,cursor,Android,Sqlite,Cursor,我有一个sqlite数据库,我想查询和检索一些值(如果它们存在的话),以防它们不存在 对于这只海豚,我有下一个代码,它将调用一个函数来创建光标,如果光标不是空的,它将检索edittext中的信息,否则它将发出祝酒词: private String lookforelementID() { // TODO Auto-generated method stub int ElementRequest=0; ElementRequest = Integer.parseInt(eTE

我有一个sqlite数据库,我想查询和检索一些值(如果它们存在的话),以防它们不存在

对于这只海豚,我有下一个代码,它将调用一个函数来创建光标,如果光标不是空的,它将检索edittext中的信息,否则它将发出祝酒词:

private String lookforelementID() {
// TODO Auto-generated method stub
     int ElementRequest=0;

     ElementRequest = Integer.parseInt(eTElementNumb.getText().toString());
     try{
         database db = new database(this);
         db.open();

         String passedReg = getIntent().getStringExtra(MainActivity.ID_STUDY);

            String returnedInfo1 = db.elementID(ElementRequest, passedReg, 0);

            if (returnedInfo1.matches("")){
                Toast.makeText(getApplicationContext(), "No Exist this Element", Toast.LENGTH_SHORT).show();
            }else{
                    eTIDElement.setText(returnedInfo1);
                String returnedInfo2 = db.elementID(ElementRequest, passedReg, 2);
                    eTElementCode.setText(returnedInfo2);
                String returnedInfo3 = db.elementID(ElementRequest, passedReg, 3);
                    eTElementDecription.setText(returnedInfo3);

            }

                db.close();
     }catch(ClassCastException e){
         e.printStackTrace();
     }
     eTElementNumb.setText(""); 
     return null;
}

带有光标的函数如下所示:

             public String elementID(int elementRequest, String idStudy, int i) {
            // TODO Auto-generated method stub
            String[] columns = new String[]{ KEY_ROWELEMENTID, KEY_STUDYID, KEY_ELEMENTCODE, KEY_ELEMENTNAME};
            Cursor c = ourDatabase.query(DATABASE_TABLEELEMENTS, columns, KEY_ELEMENTCODE + "=" + elementRequest + " AND " + KEY_STUDYID + "=" + idStudy, null, null, null, null);
            String ElementInformation = null;
            if(c != null){
                c.moveToFirst();
                ElementInformation = c.getString(i);     
            }
            return ElementInformation;
        }

通过以下行声明并初始化
光标

Cursor c=ourDatabase.query(数据库\u表元素、列、键\u元素代码+“=”+elementRequest+”和“+KEY\u STUDYID+”=”+idStudy,null,null,null)

这意味着它不能为
null
(如果'ourDatabase'为null或无法访问,
NullPointerException
或其他类型的
异常将被抛出)。因此,您不需要检查
光标是否为
null

如何确定
光标是空的还是(如果不是)列值是空的

您可以利用以下事实:
moveToFirst()
以及
isNull()
返回
boolean
值:

String ElementInformation = null;
if(c.moveToFirst() && ! c.isNull(i))
{
    ElementInformation = c.getString(i);     
}
return ElementInformation;
这样,如果
光标
为空,或者如果有一行与搜索条件匹配,但列“i”的值为
null,则方法
elementID()
将返回
null

当然,现在您必须相应地评估返回值:

String returnedInfo1 = db.elementID(ElementRequest, passedReg, 0);

if (returnedInfo1 == null){
    Toast.makeText(getApplicationContext(), "No Exist this Element", Toast.LENGTH_SHORT).show();
}
else{
    // ... do something else ...
}

这里的问题是什么?您刚才提到了它应该做什么,而不是实际发生的事情。Cursor.getCount()==0表示Cursor为空。