在查询中使用NULL作为占位符值时,是否避免了IllegalArgumentException?

时间:2011-08-27 22:26:01

标签: java android cursor

我正在尝试从内容提供商处获取联系人照片,并在此查询中遇到某种问题。

Cursor photo = cr.query( 
                   PicURI,  
                   new String[] {
                      CommonDataKinds.Photo.PHOTO
                   }, 
                   Data._ID + "=?",  
                   new String[] { photoId }, 
                   null);

这是来自logcat的相关行:
java.lang.IllegalArgumentException: the bind value at index 1 is null

经过一些测试后,我发现如果其中一个联系人没有设置图片,我会收到此异常。

我搜索并发现this同样的问题。好像这是一个错误。我无法解决它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您当然不希望找到id = null的照片,因此您必须使用以下代码:

if (photoId != null) {
   //your code here
}

如果您发布了完整的堆栈跟踪,那就太好了。

答案 1 :(得分:1)

你是对的 - 这是同样的问题:

http://code.google.com/p/android/issues/detail?id=7636

你也是正确的,这是一个错误。

“bug”在您的代码中。您需要检查“nulls”的参数,如果您的任何输入参数为null,则不应该进行查询或更新!

两种选择:

if (myphoto[i] == null)
  query.bindNull(i)

......或......

if (myphoto[i] != null)
  query ()

在调用API之前,您有责任验证和清理您的数据......

... IMHO