2012-09-24 74 views
1

我使用我的光标从我的数据库表中获取特定值。它从类型为'TEXT'的列中取出。这个想法是,列的标准值是空白的,但是当某个按钮被点击时,查询会为其添加“true”。将空字段与字符串进行比较?

String var = c.getString(1); //use cursor to get value 

但是,当我想用​​它来比较一个字符串,f.e.

if(var.equals("true")) { 
//do something crazy 
} 

我在数据库中没有任何填充的项目上出现错误。只有实际填写“真”的字段才会出错。我试过c.getString(1).toString();但这并没有诀窍......任何想法?

+1

你什么错误?如果DB_中没有_nothing,'c.getString()'是否返回'null'? – hmjd

+0

NullpointerException ..我会尝试下面的AmitD的方法,看看是否会做的伎俩 –

+0

除了检查'null',它是一个很好的做法,为每个字段插入到数据库的默认值。 –

回答

1

检查应像下面

if("true".equals(var)) { 

这样你不会得到NullPointerException

Cursor#getString Javadoc

结果和当列值为空或列类型是不是字符串类型此方法是否抛出异常是实现定义。

在检查数据库中的值之前,应该使用Cursor#isNullCursor#moveToFirst

if(!c.isNull(1)) 
//Get Value here 

Or 

if(c.moveToFirst()) 
//get value here 
1

不喜欢它:

if(var != null && !var.equals("")) 

这样你既控制空和空字符串..

1
if("true".equals(var)) { 
    //do something crazy 
} 
1

你的问题不是在铸件(你应该阅读logcat的)。你应该先检查游标包含读取之前的数据:

String var = "";  
if (c.moveToFirst()) 
var = c.getString(1); 

然后做你的支票。

if(var.equals("true")) { //do something crazy } 
+0

其中有数据,事情是只有一些字段是空的,但不是全部。或者你是什么意思? –

+0

我的意思是,如果光标是空的,你不会启动var(所以我假设logCat指向了如果statment的行)。如果光标为空,给它一个初始值(“”)不会导致nullPointerException –

+0

好吧,我现在看到你的修改答案。问题在于它不是唯一的字段,所以它会传递上面的if语句,并且仍然返回一个空结果给var,no?或者如果它从getString中返回null,它会保持一个空字符串吗? –

0
firstly check the 
if(var.trim.equals("")) { 
    //do your task 
}