Android Studio — Сбой приложения на устройстве, но не на эмуляторе — Возможно, отсутствует разрешение

#java #android #android-studio

#java #Android #android-studio

Вопрос:

В настоящее время я работаю над приложением, которое считывает несколько папок и отображает их на 3 вкладках с помощью listview. Приложение работает без проблем на эмулируемом устройстве, но выходит из строя на моем обычном устройстве.

Это результат, который я получаю, когда запускаю приложение на своем устройстве.

 09/02 12:05:03: Launching 'app' on Xiaomi MI 9 Transparent Edition.
$ adb shell am start -n "com.example.stundenzettel2/com.example.stundenzettel2.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 9449 on device 'xiaomi-mi_9_transparent_edition-331b53a7'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
W/System.err: org.xml.sax.SAXParseException: name expected (position:START_TAG <dimen name='config_icon_width'>@7:32 in java.io.InputStreamReader@f9d92f) 
        at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:147)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:107)
        at miui.content.res.ThemeValues.parseThemeValues(ThemeValues.java:123)
        at miui.content.res.ThemeResources$LoadThemeConfigHelper.load(ThemeResources.java:443)
        at miui.content.res.ThemeZipFile.loadThemeConfigInner(ThemeZipFile.java:272)
        at miui.content.res.ThemeZipFile.loadThemeConfig(ThemeZipFile.java:254)
        at miui.content.res.ThemeResources$LoadThemeConfigHelper.newTarget(ThemeResources.java:436)
        at miui.content.res.ThemeResources.loadThemeValues(ThemeResources.java:455)
W/System.err:     at miui.content.res.ThemeResources.checkUpdate(ThemeResources.java:225)
        at miui.content.res.ThemeResourcesSystem.checkUpdate(ThemeResourcesSystem.java:76)
        at miui.content.res.ThemeResources.getSystem(ThemeResources.java:123)
        at android.content.res.MiuiResourcesImpl.updateConfiguration(MiuiResourcesImpl.java:248)
        at android.content.res.Resources.updateConfiguration(Resources.java:1970)
        at android.content.res.Resources.updateSystemConfiguration(Resources.java:1983)
        at android.app.ResourcesManager.applyConfigurationToResourcesLocked(ResourcesManager.java:1048)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6270)
        at android.app.ActivityThread.access$1400(ActivityThread.java:220)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1883)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7520)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
I/Perf: Connecting to perf service.
I/FeatureParser: can't find cepheus.xml in assets/device_features/,it may be in /system/etc/device_features
W/.stundenzettel2: type=1400 audit(0.0:115384): avc: denied { read } for name="u:object_r:vendor_displayfeature_prop:s0" dev="tmpfs" ino=28839 scontext=u:r:untrusted_app:s0:c175,c257,c512,c768 tcontext=u:object_r:vendor_displayfeature_prop:s0 tclass=file permissive=0
E/libc: Access denied finding property "ro.vendor.df.effect.conflict"
E/Perf: Fail to get file list com.example.stundenzettel2
    getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
E/Perf: Fail to get file list com.example.stundenzettel2
    getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
W/.stundenzettel: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/.stundenzettel: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
I/System.out: /storage/emulated/0
W/System.err: java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
        at java.io.File.createNewFile(File.java:1008)
        at com.example.stundenzettel2.tab1.<init>(tab1.java:165)
        at com.example.stundenzettel2.PageAdapter.getItem(PageAdapter.java:25)
        at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:170)
W/System.err:     at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:24603)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
        at android.view.Choreographer.doCallbacks(Choreographer.java:854)
        at android.view.Choreographer.doFrame(Choreographer.java:789)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7520)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
W/System.err: java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
        at java.io.File.createNewFile(File.java:1008)
        at com.example.stundenzettel2.tab2.<init>(tab2.java:44)
        at com.example.stundenzettel2.PageAdapter.getItem(PageAdapter.java:31)
        at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:170)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:24603)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
W/System.err:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
        at android.view.Choreographer.doCallbacks(Choreographer.java:854)
        at android.view.Choreographer.doFrame(Choreographer.java:789)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7520)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
W/System.err: java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
        at java.io.File.createNewFile(File.java:1008)
        at com.example.stundenzettel2.tab3.<init>(tab3.java:44)
        at com.example.stundenzettel2.PageAdapter.getItem(PageAdapter.java:37)
        at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:170)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:24603)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
W/System.err:     at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
        at android.view.Choreographer.doCallbacks(Choreographer.java:854)
        at android.view.Choreographer.doFrame(Choreographer.java:789)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7520)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.stundenzettel2, PID: 9449
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
        at androidx.fragment.app.FragmentTransaction.doAddOp(FragmentTransaction.java:161)
        at androidx.fragment.app.BackStackRecord.doAddOp(BackStackRecord.java:179)
        at androidx.fragment.app.FragmentTransaction.add(FragmentTransaction.java:156)
        at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:172)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:24603)
        at androidx.constraintlayout.widget.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)
        at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6885)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:766)
        at android.view.View.measure(View.java:24603)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3072)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1896)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2188)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1784)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7787)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1031)
        at android.view.Choreographer.doCallbacks(Choreographer.java:854)
        at android.view.Choreographer.doFrame(Choreographer.java:789)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1016)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7520)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
  

Я думаю, что получаю исключение NullPointerException, потому что приложение не может прочитать файлы внутри моего устройства.
Вероятно, это проблема. Я пытаюсь получить файлы из папки и создать файл в папке, чтобы он не мог быть пустым.

 public tab1() throws IOException {

        final File path = Environment.getExternalStorageDirectory();

        System.out.println(path);

        File f = new File(path   "/My Files/Angefangen");

        File b = new File(path   "/My Files/Angefangen/bruh.txt");
        b.getParentFile().mkdirs();
        b.createNewFile();

        accepted = new ArrayList<String>(Arrays.asList(f.list()));
    }
  

Кодовый блок в виде изображения

В моем манифесте добавлены строки разрешений, и я запрашиваю разрешение в моей MainActivity, я не знаю, достаточно ли этого.

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  
 int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {
            android.Manifest.permission.READ_EXTERNAL_STORAGE,
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
    };


    public static boolean hasPermissions(Context context, String... permissions) {
        if (context != null amp;amp; permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }
  

и

 if (!hasPermissions(this, PERMISSIONS)) {
            ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
        }
  

Заранее спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Исправлено путем добавления этого в манифест для устройств выше API 29.

 <manifest ... > 
 
<application android:requestLegacyExternalStorage="true" ... >
    ...
</application></manifest>
  

Комментарии:

1. 1-Измените свойства вашего эмулятора и попробуйте получить то же исключение

2. 1-Измените свойства вашего эмулятора и попробуйте получить то же исключение 2-Проверьте все свойства вашего эмулятора на вашем реальном устройстве. Если вы используете Интернет, проверьте подключение вашего приложения к Интернету на наличие исключений. Емкость вашего устройства также может быть предметом этой проблемы. Попробуйте очистить свое устройство. В любом случае запускайте свое приложение без отладки на вашем реальном устройстве. Если после этого ваша проблема устранена, значит, у вас проблема с памятью на вашем устройстве, и вы можете использовать приложения Booster ram для освобождения…

3. @maniaq Хорошо, я воссоздал ошибку в эмуляторе, но я не уверен, как это мне помогло. Вероятно, это означает, что приложение несовместимо с моим телефоном. Я все еще получаю ошибку «отказано в разрешении».

Ответ №1:

Было исправлено путем добавления этого в манифест для устройств с API 29 и выше.

 <manifest ... >  
<application android:requestLegacyExternalStorage="true" ... >
...
</application></manifest>