首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓StrictMode java.lang.Throwable:未调用显式终止方法'close‘

安卓StrictMode java.lang.Throwable:未调用显式终止方法'close‘
EN

Stack Overflow用户
提问于 2019-12-26 12:34:06
回答 1查看 1.1K关注 0票数 1

我在我的应用程序中启用了strict mode,但它崩溃并出现错误

代码语言:javascript
复制
 boolean DEVELOPER_MODE=true;
        if (DEVELOPER_MODE) {
            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                    .detectDiskReads()
                    .detectDiskWrites()
                    .detectAll()   // or .detectAll() for all detectable problems //.detectNetwork()
                    .penaltyLog()
                    .build());
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .penaltyLog()
                    .penaltyDeath()
                    .build());
        }

E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.java.lang.Throwable: Explicit termination method 'close' not called

在行

代码语言:javascript
复制
 private  void getRecentImages (){

            String[] colums={MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID};

            Cursor imageCursor = getActivity().getContentResolver().query(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    colums,
                    null,
                    null,
                    MediaStore.Images.Media._ID);
            int image_Column_Index=imageCursor.getColumnIndex(MediaStore.Images.Media._ID);
            count=imageCursor.getCount();
            thumbnails=new Bitmap[count];
            arrayPath=new String[count];
            for (int i = 0; i <count; i++) {
                imageCursor.moveToPosition(i);
                int id = imageCursor.getInt(image_Column_Index);
                int dataColumnIndex = imageCursor.getColumnIndex(MediaStore.Images.Media.DATA);
                arrayPath[i] = imageCursor.getString(dataColumnIndex);
                // APP CRASHED WITH THIS LINE
                thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(getActivity().getContentResolver(),id,MediaStore.Images.Thumbnails.MICRO_KIND,null);  
            }
            imageCursor.close();

        }

我关闭游标后循环结束,我不确定为什么我会得到这个错误,即使我关闭游标后,我不再needed.please引导我得到这个修复。我在任何情况下都没有禁用严格模式的选项,所以我需要在不禁用严格模式的情况下修复这个问题。

完整的堆栈跟踪错误。

代码语言:javascript
复制
12-26 10:21:58.358 12925-12925/com.example.testD/Bottom Sheet: Parent = null Context com.elaxer.Navigation_Drawer@cbf3705
12-26 10:21:59.976 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 769
12-26 10:21:59.976 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 771
12-26 10:21:59.976 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 20752
12-26 10:21:59.976 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 20753
12-26 10:21:59.976 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 20754
12-26 10:22:01.059 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 2
12-26 10:22:01.149 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 2
12-26 10:22:01.255 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 2
12-26 10:22:01.334 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 2
12-26 10:22:01.788 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41985
12-26 10:22:01.788 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41986
12-26 10:22:01.788 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41987
12-26 10:22:01.788 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41988
12-26 10:22:01.788 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41990
12-26 10:22:01.789 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41996
12-26 10:22:01.867 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41985
12-26 10:22:01.867 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41986
12-26 10:22:01.867 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41987
12-26 10:22:01.867 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41988
12-26 10:22:01.867 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41990
12-26 10:22:01.867 12925-12925/com.example.testW/ExifInterface: Skip the tag entry since tag number is not defined: 41996
12-26 10:22:01.904 12925-12933/com.example.testE/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
    java.lang.Throwable: Explicit termination method 'close' not called
        at dalvik.system.CloseGuard.open(CloseGuard.java:180)
        at java.io.FileInputStream.<init>(FileInputStream.java:78)
        at java.io.FileInputStream.<init>(FileInputStream.java:103)
        at android.media.ExifInterface.loadAttributes(ExifInterface.java:1338)
        at android.media.ExifInterface.<init>(ExifInterface.java:1057)
        at android.media.ThumbnailUtils.createThumbnailFromEXIF(ThumbnailUtils.java:479)
        at android.media.ThumbnailUtils.createImageThumbnail(ThumbnailUtils.java:96)
        at android.provider.MediaStore$InternalThumbnails.getThumbnail(MediaStore.java:753)
        at android.provider.MediaStore$Images$Thumbnails.getThumbnail(MediaStore.java:1085)
        at com.elaxer.mainScreenFragments.BottomSheet.getRecentImages(BottomSheet.java:207)
        at com.elaxer.mainScreenFragments.BottomSheet.onCreateView(BottomSheet.java:69)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-26 10:22:01.906 12925-12933/com.example.testW/System.err: StrictMode VmPolicy violation with POLICY_DEATH; shutting down.
12-26 10:22:01.906 12925-12933/com.example.testI/Process: Sending signal. PID: 12925 SIG: 9
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-28 19:44:46

在不移除StrictMode的情况下,您可以在Glide库(图像处理库)的帮助下实现。它不会给你任何错误。我删除了你的代码的一小部分,以使其工作没有错误。

代码语言:javascript
复制
 private  void getRecentImages (){            
        String[] colums={MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID};
        final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC";
        Cursor imageCursor = getActivity().getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                colums,
                null,
                null,
                orderBy);
        count=imageCursor.getCount();
        arrayPath=new String[count];
        for (int i = 0; i <count; i++) {
            imageCursor.moveToPosition(i);
            int dataColumnIndex = imageCursor.getColumnIndex(MediaStore.Images.Media.DATA);
            arrayPath[i] = imageCursor.getString(dataColumnIndex);
            //thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(getActivity().getContentResolver(),id,MediaStore.Images.Thumbnails.MICRO_KIND,null);
        }
        imageCursor.close();

    }

您将在arrayPath中获取图像的路径,因此不需要使用thumbnail方法。所以当你需要加载图片的时候,只需要像这样使用Glide

代码语言:javascript
复制
        `Glide.with(getActivity()).load(arrayPath[position]).into(youImageView);`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59483863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档