IllegalArgumentException: You must not call setTag() on a view Glide is targeting

  1. 如果使用ListView,只需改变item的布局就可以解决问题
  2. 如果想要布局简洁,不用改变布局文件,使用RecyclerView来代替ListView
  3. 更改图片加载框架 ImageLoader、Picasso、Fresco之类

 1

<com.jackandphantom.circularimageview.RoundedImage
            android:id="@+id/iv_pic"
            android:layout_width="65dp"
            android:layout_height="65dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="20dp"
            android:src="@drawable/guanguan2"
            app:rounded_radius="8" />

改为

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <com.jackandphantom.circularimageview.RoundedImage
                android:id="@+id/iv_pic"
                android:layout_width="65dp"
                android:layout_height="65dp"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="20dp"
                android:src="@drawable/guanguan2"
                app:rounded_radius="8" />
        </FrameLayout>

3. 

//Glide.with(mContext).load(domain + designFile[0] + Url.qiniu_last_middle).into(viewHolder.ivPic);

改为 

                                    final ViewHolder finalViewHolder1 = viewHolder;
                                    ImageLoader.getInstance().loadImage(domain + designFile[0] + Url.qiniu_last_middle, new ImageLoadingListener() {
                                        @Override
                                        public void onLoadingStarted(String imageUri, View view) {

                                        }

                                        @Override
                                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                                        }

                                        @Override
                                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                                            finalViewHolder1.ivPic.setImageBitmap(loadedImage);
                                        }

                                        @Override
                                        public void onLoadingCancelled(String imageUri, View view) {

                                        }
                                    });

 

在 Java 中,`java.lang.IllegalArgumentException` 是一个运行时异常,表示传递给方法的参数不合法。具体到错误信息 `amountToMove must not be zero`,它表明某个操作需要一个非零的参数值,但实际传入了 `0` 或等效的无效值。 ### 错误原因分析 1. **参数值为零**:该异常提示 `amountToMove` 参数必须不为零。通常,这个参数可能用于表示某种移动、转移或操作的量值,例如文件移动、数据传输、库存转移等业务场景中的数量或偏移量。 2. **业务逻辑约束**:某些业务逻辑中明确规定了参数必须为非零值。例如,在数学运算中除数不能为零,或者在资源转移中要求转移数量必须大于零。 3. **数据校验机制触发**:程序内部可能有参数校验逻辑,例如: ```java if (amountToMove == 0) { throw new IllegalArgumentException("amountToMove must not be zero"); } ``` 这种校验机制是为了防止后续操作因无效参数而引发更复杂的错误。 ### 解决方法 1. **确保参数非零**: 在调用相关方法之前,对 `amountToMove` 的值进行检查,确保其不为零。例如: ```java if (amountToMove == 0) { // 处理异常情况,例如设置默认值或记录日志 amountToMove = 1; // 假设默认值为 1 } ``` 2. **参数来源校验**: 如果 `amountToMove` 来自外部输入(例如用户输入、网络请求或配置文件),需要在数据进入业务逻辑之前进行校验和处理。例如: ```java public void moveResources(int amountToMove) { if (amountToMove <= 0) { throw new IllegalArgumentException("amountToMove must not be zero or negative"); } // 业务逻辑 } ``` 3. **日志与调试**: 在异常发生时,记录详细的日志信息以帮助定位问题来源。例如: ```java try { moveResources(amountToMove); } catch (IllegalArgumentException e) { System.err.println("Invalid amountToMove value: " + amountToMove); e.printStackTrace(); } ``` 4. **单元测试**: 编写单元测试用例,验证 `amountToMove` 参数在各种边界条件下的行为,确保程序能够正确处理非法值。 ### 代码示例 以下是一个完整的代码示例,展示了如何避免 `IllegalArgumentException`: ```java public class ResourceMover { public void moveResources(int amountToMove) { if (amountToMove <= 0) { throw new IllegalArgumentException("amountToMove must not be zero or negative"); } System.out.println("Moving resources: " + amountToMove); } public static void main(String[] args) { ResourceMover mover = new ResourceMover(); int amountToMove = 0; try { if (amountToMove == 0) { amountToMove = 1; // 设置默认值 } mover.moveResources(amountToMove); } catch (IllegalArgumentException e) { System.err.println("Invalid amountToMove value: " + amountToMove); e.printStackTrace(); } } } ``` ### 总结 `java.lang.IllegalArgumentException: amountToMove must not be zero` 是由于传递给方法的参数值不符合预期要求(例如为零)而引发的异常。解决方法包括: - 在调用方法前检查参数值。 - 在方法内部添加参数校验逻辑。 - 记录日志以帮助定位问题。 - 编写单元测试确保参数处理的正确性。 通过这些措施,可以有效避免此类异常的发生,提高程序的健壮性和可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值