访问android 10中的文件时出现问题:-android studio

访问android 10中的文件时出现问题:-android studio,android,nullpointerexception,file-handling,android-security,android-10.0,Android,Nullpointerexception,File Handling,Android Security,Android 10.0,Android 10不允许我从外部存储器访问文件。在安卓9中,我的应用程序运行良好。我将手机从安卓9升级到安卓10,我的应用程序停止响应 main_activity.java File directory; File path; File[] listfile; //File listFiles; ArrayList<String> arrayList; directory = Environment.getExternalStorageDirect

Android 10不允许我从外部存储器访问文件。在安卓9中,我的应用程序运行良好。我将手机从安卓9升级到安卓10,我的应用程序停止响应

main_activity.java

File directory;
    File path;
    File[] listfile;
    //File listFiles;
    ArrayList<String> arrayList;

directory = Environment.getExternalStorageDirectory();

        path = new File(directory.getAbsolutePath()+ "/myfile/");

        arrayList = new ArrayList<String>();
        mycardview.setAdapter(new ImageAdapter(listimage.this, arrayList));

if (path.isDirectory()) {
            listfile =path.listFiles();
            for (int i = 0; i < listfile.length; i++) {
                arrayList.add(listfile[i].getAbsolutePath());
            }
            Collections.shuffle(arrayList);
文件目录;
文件路径;
文件[]列表文件;
//文件列表文件;
ArrayList ArrayList;
directory=Environment.getExternalStorageDirectory();
路径=新文件(directory.getAbsolutePath()+“/myfile/”;
arrayList=新的arrayList();
setAdapter(新的ImageAdapter(listimage.this,arrayList));
if(path.isDirectory()){
listfile=path.listFiles();
for(int i=0;i
错误:

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.rajiv/com.example.rajiv.listimage}: java.lang.NullPointerException:尝试获取空数组的长度 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3374)上 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3513) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109) 位于android.os.Handler.dispatchMessage(Handler.java:107) 位于android.os.Looper.loop(Looper.java:214) 位于android.app.ActivityThread.main(ActivityThread.java:7682) 位于java.lang.reflect.Method.invoke(本机方法) 位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 原因:java.lang.NullPointerException:尝试获取空数组的长度 位于com.example.rajiv.listimage.onCreate(listimage.java:74) 位于android.app.Activity.performCreate(Activity.java:7815) 位于android.app.Activity.performCreate(Activity.java:7804) 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1318) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3349)上

我在网上查过,问题不在代码里
谷歌已经在安卓10中应用了一个安全补丁,因此代码不起作用。我还使用了清单上的权限以及运行时权限。

另一个被谷歌更改发现的权限

您需要使用MediaStore或Storage Access Framework(SAF),这是应用程序专用目录以外文件的详细信息


虽然作为一个快速解决方案,是暂时选择退出,但这只会在Android 11

检查此链接
getExternalStorageDirectory()
已被弃用Android 10
targetSdkVersion 29
实际上它可以使用getExternalStorageDirectory()。感谢您的回答,我从现在起不再使用此功能。