ioneday / ImageSelector

Photo picker library for Android. Support single choice、multi-choice、cropping image and preview image.
408 stars 126 forks source link

java.lang.NullPointerException android 4.1.1 #2

Open HiPipilu opened 8 years ago

HiPipilu commented 8 years ago

在ImageSelectorActivity里,FolderWindow消失的时候,会引起这个问题 java.lang.NullPointerException at android.view.ViewRootImpl.drawAccessibilityFocusedDrawableIfNeeded(ViewRootImpl.java:2301) 不知道为什么会引起,stackoverflow上给了一个解决方案http://stackoverflow.com/questions/16221175/aos-4-x-crash-issue-with-animation。 能分析下是怎么引起的吗?

ioneday commented 8 years ago

@HiPipilu 能贴出完整的 Log么? 有可能是 setPopupWindowTouchModal 这个方法引起的。

这个方法是通过反射调用的,目的是为了点击PopupWindow外部 窗体不消失,Touch事件继续向下传递。

HiPipilu commented 8 years ago

完整log如下: 06-01 14:26:47.904 21416-21416/com.yongchun.multiimageselector E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.view.ViewRootImpl.drawAccessibilityFocusedDrawableIfNeeded(ViewRootImpl.java:2301) at android.view.ViewRootImpl.onHardwarePostDraw(ViewRootImpl.java:1931) at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1182) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2147) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2019) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1830) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)

操作是点击“所有照片”后,PopupWindow消失的时候,引起的这个异常。引起异常的手机系统是4.1.1。 我另一个手机5.0的系统,不会产生这个异常

ioneday commented 8 years ago

@HiPipilu 你可以在FolderWindow 41行代码处,把setPopupWindowTouchModal(this, false);给注释掉。 注释掉后,当window打开后,点击预览不会跳转界面,而是使window消失。对功能没什么影响。

你是怎么让window消失的,点击所有图片?按返回键?点击预览?点击window上面 ToolBar下面的灰色透明区域?

ioneday commented 8 years ago

@HiPipilu 或者你把 setPopupWindowTouchModal(this, false);这行代码 移动到 registerListener()后面。 试试会不会报错。

lambor commented 8 years ago

@ioneday http://blog.csdn.net/zhuhai__yizhi/article/details/46850355

lambor commented 8 years ago

FolderWindow.java 中

@Override
    public void dismiss() {
        ...
        animation.setAnimationListener(new Animation.AnimationListener() {
            ...
            @Override
            public void onAnimationEnd(Animation animation) {
                **new Handler().post(new Runnable() {
                    @Override
                    public void run() {
                        FolderWindow.super.dismiss();
                        isDismiss = false;
                    }
                });**
            }
            ...
        }
        ...
    }
okadaNana commented 7 years ago

我也遇到了,楼上的方法可行