美文网首页
遇到的一些坑

遇到的一些坑

作者: 凯哥在此 | 来源:发表于2017-05-25 15:55 被阅读0次

    butterknife zelezny threw an uncaught ArrayIndexOutOfBoundsException

    Butterknife突然就爆出了这个问题,刚开始以为是注解工具出了问题,就使用了findviewbyid,后来一个个打的时候才发现是我的id写错了,如果你也是这样就检查一下你的id是不是下划线为第一个

    1.png

    Error:Could not find method compile() for arguments [com.android.support:cardview-v7:25.3.1] on DefaultExternalModuleDependency{group='com.android.support', name='appcompat-v7', version='25.3.1', configuration='default'} of type org.gradle.api.internal.artifacts.dependencies.DefaultExternalModuleDependency.

    Please install the Android Support Repository from the Android SDK Manager.
    <a href="openAndroidSdkManager">Open Android SDK Manager</a>

    解决办法:用着用着就这样了,刚开始真不知道为什么,后来看到build.gradl里面,compile里面的都叠成一行了,好吧,他说找不到"not find method compile() for arguments" 原来是这个原因,将其加上换行就好了,


    mob分享,本来上线的时候是没问题的,后来莫名其妙魅族手机分享失败,小米手机确实成功的,这个就让人很坑爹,小米手机没事.魅族手机有问题.这就让我一直找魅族手机的原因,后来网上说图片的原因.我就改了规格,也叫后台改了图片,但是还是无济于事.一直分享失败,最后oks.setCallback才知道,一直显示NullPointerException Reader<init>异常,实在不知道,最后找了好久的原因,才知道是后台的原因...后台传过来的图片链接是http链接,这个过程中Mob会自己下载图片,然后再分享出去,但是我们后台给的链接重定向了,是的重定向了,然后mob就下载不下来,就一直报空指针异常,好吧.最后叫他改一下链接就好了


    2.png

    分割线-------------------------------------------------------------------------------

    Process: com.cdzb.milier, PID: 10368
                                                                 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 15(offset:15).state:30
                                                                     at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5504)
                                                                     at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:282)
                                                                     at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:336)
                                                                     at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:349)
                                                                     at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:356)
                                                                     at android.support.v7.widget.GapWorker.run(GapWorker.java:387)
                                                                     at android.os.Handler.handleCallback(Handler.java:754)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                     at android.os.Looper.loop(Looper.java:163)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:6360)
                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
    

    使用recycleview的时候都会出现这个问题,本身就是一个频繁刷新的一个控件,这个是他本身内部的bug,RecyclerView是Android-support-v7-21版本中新增的一个Widget,RecyclerView在刷新数据的时候会出现异常,看报错就知道,并没有报应用层的bug,
    有2个解决办法:

    1. 捕获了异常,防止crash掉,这个是谷歌recycleview导致的,所以这样做能解决这个问题,在创建recycleview的
      LinearLayoutManager的时候替换成LinearLayoutManagerWrapper,
    public class LinearLayoutManagerWrapper extends LinearLayoutManager {
      public LinearLayoutManagerWrapper(Context context) {
        super(context);
      }
    
    public LinearLayoutManagerWrapper(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }
    
    public LinearLayoutManagerWrapper(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        try {
            super.onLayoutChildren(recycler, state);
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
            System.out.print("recycle的异常捕获了");
        }
    }
    

    }

    2.如果这样还是不能解决问题,在每次改动adapter的数据的时候就用Adapter.notifyDataSetChanged();

    相关文章

      网友评论

          本文标题:遇到的一些坑

          本文链接:https://www.haomeiwen.com/subject/wfrzxxtx.html