问题1.io.reactivex.exceptions.UndeliverableException:The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.Throwable: Unable to resolve host "upload-fs.qiniup.com": No address associated with hostname

io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)

解决:在自定义Application的onCreate()调用setRxJavaErrorHandler()

private void setRxJavaErrorHandler() {

if (RxJavaPlugins.getErrorHandler() != null || RxJavaPlugins.isLockdown()) {

LogUtils.d("App", "setRxJavaErrorHandler getErrorHandler()!=null||isLockdown()");

return;

}

RxJavaPlugins.setErrorHandler(new Consumer() {

@Override

public void accept(Throwable e) {

if (e instanceof UndeliverableException) {

e = e.getCause();

LogUtils.d("App", "setRxJavaErrorHandler UndeliverableException=" + e);

return;

} else if ((e instanceof IOException)) {

// fine, irrelevant network problem or API that throws on cancellation

return;

} else if (e instanceof InterruptedException) {

// fine, some blocking code was interrupted by a dispose call

return;

} else if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) {

// that's likely a bug in the application

Thread.UncaughtExceptionHandler uncaughtExceptionHandler =

Thread.currentThread().getUncaughtExceptionHandler();

if (uncaughtExceptionHandler != null) {

uncaughtExceptionHandler.uncaughtException(Thread.currentThread(), e);

}

return;

} else if (e instanceof IllegalStateException) {

// that's a bug in RxJava or in a custom operator

Thread.UncaughtExceptionHandler uncaughtExceptionHandler =

Thread.currentThread().getUncaughtExceptionHandler();

if (uncaughtExceptionHandler != null) {

uncaughtExceptionHandler.uncaughtException(Thread.currentThread(), e);

}

return;

}

LogUtils.d("App", "setRxJavaErrorHandler unknown exception=" + e);

}

});

}

问题2:java.lang.IllegalArgumentException

You cannot start a load for a destroyed activity

解决: Glide调用之前判断activity是否销毁

//Fix You cannot start a load for a destroyed activity

if (activity == null

|| activity.isFinishing()

|| activity.isDestroyed()) {

return;

}

Glide.with(context).load(url).into(ImageView)

问题3:java.lang.ClassCastException     android.graphics.drawable.AnimatedImageDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 

解决: 这个是CropImageView做裁剪界面时,未过滤gif导致

@Nullable

public Bitmap getCropBitmap(int expectWidth, int exceptHeight, boolean isSaveRectangle) {

if (expectWidth <= 0 || exceptHeight < 0) return null;

Drawable drawable = this.getDrawable();

if (drawable == null) return null;

if (drawable instanceof BitmapDrawable) {

Bitmap srcBitmap = ((BitmapDrawable) drawable).getBitmap();

srcBitmap = rotate(srcBitmap, sumRotateLevel * 90); //最好用level,因为角度可能不是90的整数

return makeCropBitmap(srcBitmap, mFocusRect, getImageMatrixRect(), expectWidth,

exceptHeight, isSaveRectangle);

}

return null;

}

问题4:遇到ImageView.setImageURI() 导致anr

解决: 使用glide加载

Glide.with(context)

.load(uri)

.apply(options)

.into(imageView);

问题5: java与Kotlin混用时注意int与Int

Java

public class Simple(){

private int type;

}

kotlin

data class Simple(val type: Int)

遇到

public class MyRecyclerViewAdapter extends RecyclerView.Adapter{

...

@Override

public int getItemViewType(int position) {

//此种用法有时kotlin定义实体类会有问题,type判断不准

return datas.get(position).type;

}

}

解决: 使用到getItemViewType(int postion)方法时 编码都用java要么kotlin

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: