java.lang.IllegalArgumentException: the bind value at index 1 is null
           at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)

自定义相机拍摄了多张图片,保存到本地并添加到系统相册,然后在自定义的相册中浏览拍摄的图片并删除的时候第一张没问题,删第二张就报上面的异常了。

删除图片的方法除了删除本地的图片file,同时也删除数据库中该数据。看信息是由个值为空。查看日志:

E/PhotoAlbumDetailActvty2: deleteImage,imgRealPath:/storage/emulated/0/faceallRecog/IMG_20171204_214942.jpg,imgPathcontent://media/external/images/media/27706
E/PhotoAlbumDetailActvty2: deleteImage,imgRealPath:null,imgPathcontent://media/external/images/media/27706
第一行是删除的第一张图片,第二行是删除的第二张图片,可以看到imgRealPath为null,而imgPath为第一张图片的。

在看删除的方法:

private void deleteImage(String imgPath) {
        String imgRealPath = getRealPathFromUri(activity, Uri.parse(imgPath));
        Log.e(TAG, "deleteImage,imgRealPath:" + imgRealPath + ",imgPath" + imgPath);
        ContentResolver resolver = activity.getContentResolver();
        Cursor cursor = MediaStore.Images.Media.query(resolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=?",
                new String[]{imgRealPath}, null);
可知是删除第二张图片时传入的参数imgPath是第一张图片的路径,而第一张已经删除,导致imgRealPath为空。
本人是用viewPager显示的图片,图片删除后viewPager自动显示下一张图片。

在上面的写法中,图片删除后deleteImage(String imgPath)中imgPath依旧是被删除的图片路径,在继续删除时会报上面的异常。

现修改为:

private int selectIndex;//选择的图片的下标
private void getImgUriStr(final int index) { //该方法是在adapter中调用,从adapter点击中获取index数据,传给selectIndex
        selectIndex=index;
        Log.e("selectIndex",selectIndex+"");
 //删除图片
    private void deleteImage() {
        //解决自定义相机拍摄多张照片后查看图片并删除多张图片时崩溃的问题。删除图片会导致图片的总数发生变化,传入selectIndex获取最新的图片uri。
        selectImgUri = currentLabelList.get(selectIndex).getOriginalUri();
        imgId = currentLabelList.get(selectIndex).getMediaID();
        String imgRealPath = getRealPathFromUri(activity, Uri.parse(selectImgUri));
        Log.e(TAG, "deleteImage,imgRealPath:" + imgRealPath + ",selectImgUri:"+selectImgUri);
        ContentResolver resolver = activity.getContentResolver();
        Cursor cursor = MediaStore.Images.Media.query(resolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=?",
                new String[]{imgRealPath}, null);
        boolean result = false;
        if (cursor!=null&&cursor.moveToFirst()) {
            long id = cursor.getLong(0);
            Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            Uri uri = ContentUris.withAppendedId(contentUri, id);
            int count = activity.getContentResolver().delete(uri, null, null);
            activity.getContentResolver().notifyChange(uri, null);
            result = count == 1;
        } else {
            File file = new File(imgRealPath);
            result = file.delete();
        //如果要删除的图片是收藏的图片,则要从收藏的表里删除
        if (favFlag) {
            helper.deleteFavouritesImg(imgId);
        if (result) {
            //把该图片从list中删除并刷新
            removeFromList(currentLabelList, imgId);
            //这个方法不能删除list中的元素
//            currentLabelList.remove(imgPath);
            myAdapter.notifyDataSetChanged();
            viewPagerAdapter.notifyDataSetChanged();
            showToast(activity, "删除成功");
        //解决删除图片后顶部图片总数没有变化的bug。
        tvCountView.setText((selectIndex + 1) + "/" + currentLabelList.size());

获取最新的图片数据,然后进行删除,上面的问题解决。

查询数据库里面的数据时,报这个异常 the bind value at index 1 is null,网上查询后,发现会出现这个异常通常有2个原因: 1.要查询的字段不存在 2.where条件的参数传值为null 仔细检查代码,发现是第二种情况,加了非null判断后,程序正常运行
在GreendDao查询时 如果id查询默认为自动添加,则不可查询id ,反之其他主键也是如此 例:中注释的DAO,id是自增的,不能查询后再进行添加,错误在于被注释的地方 try { FeedBackDao dao = getDaoSession().getFeedBackDao(); // FeedBack feed = dao.queryBuilder() // .where(FeedBackDao.Properties.Id.eq
出现错误的情形: |->  return db.rawQuery("SELECT * FROM class WHERE account = ?", new String[]{account}); 一般acount为null的时候会触发... 2015-11-03 08:14:54.332 [localhost-startStop-1] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - HHH000228: Running hbm2ddl schema update 2015-11-03 08:14:54.332 [localhost-startStop-1] INFO org.hib...
`java.lang.IllegalArgumentException: Unknown return value type: java.lang.Integer` 这个异常通常发生在尝试将一个不是 `Integer` 类型的对象当作 `Integer` 返回时。这种情况常见于接口、泛型等场景。 ### 异常解释 这个异常表示 Java 的运行环境无法识别返回值的数据类型。在 Java 中,数据类型必须明确指定,而且对于某些上下文,如方法声明或参数传递,返回值或参数的实际类型需要被系统精确理解。 ### 示例场景 假设你有一个接口定义: ```java public interface MyInterface { Integer myMethod(); 然后在某个类中实现了该接口,并尝试返回了一个非 `Integer` 类型的对象: ```java import java.util.List; public class MyClass implements MyInterface { @Override public Object myMethod() { List<Integer> numbers = new ArrayList<>(); // 假设这里添加了一些整数 return numbers; // 此处返回的是List<Integer>, 而不是Integer 在这个例子中,当调用 `MyClass` 实现的 `myMethod()` 方法时,由于它返回了 `List<Integer>` 类型而不是 `Integer` 类型,因此会引发 `IllegalArgumentException: Unknown return value type: java.lang.Integer` 异常。 ### 解决方案 要解决这个问题,你需要确保返回的类型与方法声明以及调用期望的一致: ```java @Override public Integer myMethod() { List<Integer> numbers = new ArrayList<>(); // 假设这里添加了一些整数 int sum = numbers.stream().mapToInt(i -> i).sum(); // 将列表转换为单个Integer类型的值作为结果 return sum; 在这个修改后的版本中,我们计算了列表中所有整数的总和并将其返回,这使得 `myMethod()` 方法可以正常返回一个 `Integer` 类型的结果,避免了异常的发生。 ### 相关问题: 1. 在什么情况下可能会抛出 `IllegalArgumentException`? 2. 怎样检查和处理 Java 程序中的类型错误? 3. 如何有效地利用泛型避免此类异常? 这样的解答涵盖了基本原理、示例及解决方案,并提出了进一步深入学习的问题,旨在提供全面的理解。
java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String问题解决 28004 java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String问题解决 青蛙大侠: 我也关注这个问题,后台可以解码出来么? Invalid row number (65536) outside allowable range (0..65535) CSDN-Ada助手: 不知道 MySQL入门 技能树是否可以帮到你:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql sql去除表中某个字段的空格 CSDN-Ada助手: 推荐 MySQL入门 技能树:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql Missing artifact org.yaml:snakeyaml:jar:1.29 CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java 多个Ativity值传递FLAG_ACTIVITY_FORWARD_RESULT CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加条理清晰的目录;(2)提升标题与正文的相关性;(3)增加除了各种控件外,文章正文的字数。