Environment.getExternalStorageDirectory().listFiles() 返回 null

2024-01-07

我的应用程序中需要一个文件选择器,在尝试了不起作用的第三方库(无内容)后,我尝试自己实现它,并且得到了相同的结果。

最奇怪的是

Environment.getExternalStorageDirectory().listFiles() 

返回空值

这是我的代码,

public class FilePickerActivity extends AppCompatActivity {

    FilePickerActivity mActivity = this;
    FilePickerAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_picker);

        ListView listView = (ListView) findViewById(R.id.list);
        mAdapter = new FilePickerAdapter(this, new File("/"));//Environment.getExternalStorageDirectory());
        listView.setAdapter(mAdapter);
    }

    private class FilePickerAdapter extends ArrayAdapter<File> {

        ArrayList<File> mDataset = new ArrayList<>();
        Context context;
        File rootFile;

        public void explore(File file){
            rootFile = file;
            refresh();
        }

        public void refresh(){

            mDataset.clear();
            File[] list = rootFile.listFiles();

            if (list != null) {
                for (File file : list) {
                    if (!file.isHidden()) {
                        mDataset.add(file);
                    }
                }
            }
            notifyDataSetChanged();
        }

        public boolean getHigher(){
            rootFile = rootFile.getParentFile();
            if(rootFile == null ){
                return false;
            }
            refresh();
            return true;
        }

        public FilePickerAdapter(Context context,
                                  File rootFile) {
            super(context, R.layout.aaaaaaaaa_file_picker_list_item, new ArrayList<File>());
            this.context = context;
            this.rootFile = rootFile;
            refresh();
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public int getCount() {
            return mDataset.size();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView==null){
                convertView = LayoutInflater.from(context).inflate(R.layout.aaaaaaaaa_file_picker_list_item, parent, false);
            }

            final File itemFile = mDataset.get(position);
            final String itemString = itemFile.getName();

            ((TextView) convertView.findViewById(R.id.textView)).setText(itemString);
            ImageView iv = (ImageView) convertView.findViewById(R.id.iv);

            if(itemFile.isDirectory()){
                iv.setImageResource(R.drawable.ic_attachment_24dp);
                convertView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        explore(itemFile);
                    }
                });
            } else {
                iv.setImageResource(R.drawable.ic_arrow_vector);
            }

            return convertView;
        }
    }

    @Override
    public void onBackPressed() {
        if(!mAdapter.getHigher())
            super.onBackPressed();
    }
}

Thanks,


面临同样的问题。这可能是由于多种原因造成的,但我的原因是权限不当。 对于 23 以上的 API,您必须在 Manifest 中添加运行时权限。 希望它能帮助某人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Environment.getExternalStorageDirectory().listFiles() 返回 null 的相关文章

随机推荐

  • 为什么 Rust 使用“match”而不是“switch”或“case”?

    我很好奇这件事的历史 我会假设switch会吸引 C C Java etc 程序员 因此是一个自然的选择 如果有人想避免语义上的混乱 因为match比switch 我假设有人会借case来自哈斯克尔 Rust 参考文献引用了 https d
  • 存根 setTimeout 函数

    我有一个函数等待 async function wait time return new Promise resolve gt setTimeout resolve time 我这样称呼这个等待 await wait 5000 来自不同的函
  • AWS 从 S3 下载对象时出错,“配置文件不能为空”

    我已经看过了this https stackoverflow com questions 40897548 aws java s3 uploading error profile file cannot be null 但没有答案来解释我的
  • Delphi 控件中的 Ctrl+Backspace

    the Ctrl Backspace键盘快捷键通常会删除插入符号左侧的单词 但它不适用于您期望的任何标准 Delphi 控件 TEdit TMemo TComboBox等 有趣的是 Ctrl Delete工作得很好 有人知道如何轻松纠正这种
  • iOS SDK。显示通话中状态栏

    任何人都知道如何在应用程序进入后台时显示通话状态栏和来自应用程序的消息 我知道 AppStore 中的许多应用程序都可以执行此操作 例如 http myevoz com http myevoz com 据我了解 他们使用 SBStatusB
  • Angular 6:在子路由中跳过父路由解析器?

    我正在尝试向我的应用程序添加路由 并且我有一个带有parentResolver的父路由和一个带有Child Resolver的子路由 当我访问 parent 时 父解析器完美启动 但问题是 当我访问 parent child 时 父解析器会
  • UISplitViewController - 防止 iPhone 6 plus 上的横向分割

    我在我的应用程序中使用 UISplitViewController 这在 iPad 上工作得很好 主要和次要始终可见 并且在大多数 iPhone 上工作得很好 它的作用类似于 UINavigationController 在 iPhone
  • 如何使长TextView的一部分在屏幕上可见?

    我在 ScrollView 中有一个 TextView TextView 充满了大文本 任何时候只有部分文本在屏幕上可见 现在我想 以编程方式 强制文本的某些部分对用户可见 例如 我的文字是 Lorem ipsum dolor sat am
  • 我如何知道我的服务器是否有 NUMA?

    从 Java 垃圾收集中跳出来 我遇到了NUMA 的 JVM 设置 http www slideshare net ludomp gc tuning in the hotspot java vm a fisl 10 presentation
  • 无法理解条件执行流程[重复]

    这个问题在这里已经有答案了 一个简单的js片段 为什么总是提示 结果为空 据我了解 if块应该被执行 因为result is true并警惕 结果不为空 这是因为 进行隐式类型转换 如果您使用严格版本 它会做你所期望的 但宽松版型 会将这两
  • Firebase Android 自动登录

    所以我设置了电子邮件 密码注册和登录 那是有效的 我以为 Firebase 已经解决了这个问题 但显然没有 我希望在用户关闭应用程序后 下次打开应用程序时就已经登录 缺什么 class LoginActivity AppCompatActi
  • 使用 nth-child 设置第 4 项及以后项目的样式

    我有一个列表项 我希望第四项及以后的项有不同的background color 我尝试过以下方法 li nth child 4 background color blue 这仅对第 4 个项目进行样式设置 然后我尝试了以下操作 希望它能够为
  • Java 8 多线程:如何实现并行性以及单个线程的超时?

    我想要实现的目标摘要 我想并行执行 N 个任务 这样任何单个任务的运行时间都不应超过两秒 我们可以将此类任务标记为失败 作为输出 我想返回成功任务的输出和失败任务的状态为失败 此外 一项任务的超时不应导致电路中断 即其他任务的执行不应停止
  • 如何在 UML 中表示从模板参数的继承?

    使用 UML 我如何表示A lt Foo gt 在下面的代码中 template lt class T gt class A public T class Foo A lt Foo gt a foo 像这样的东西 对可怜的ascii艺术表示
  • ForkJoinPool - 为什么程序抛出 OutOfMemoryError?

    我想在 Java 8 中尝试 ForkJoinPool 所以我编写了一个小程序来搜索给定目录中名称包含特定关键字的所有文件 Program public class DirectoryService public static void m
  • C# 将字节数组附加到现有文件

    我想将字节数组附加到已经存在的文件中 C test exe 假设以下字节数组 byte appendMe new byte 1000 File AppendAllBytes C test exe appendMe Something lik
  • 嵌套 jQuery 选择器

    无论如何 是否有嵌套的 jQuery 选择器 例如 如果该页面还有一个ID LeadEditForm Title 某处然后执行以下操作 jQuery id A0 R0 Main Phone Number live mousedown fun
  • 在 Android 中使用 EditText 小部件屏蔽输入

    有没有办法可以为 Android 中的 EditText 控件指定输入掩码 我希望能够为社会安全号码指定类似 的内容 这将导致任何无效输入被自动拒绝 例如 我输入字母字符而不是数字 我意识到我可以添加 OnKeyListener 并手动检查
  • 如何检测用户是否不允许位置更新

    如果用户在首次启动时拒绝允许位置更新 我怎么能检测到这个 检查CLLocationManager 的authorizationStatus 方法
  • Environment.getExternalStorageDirectory().listFiles() 返回 null

    我的应用程序中需要一个文件选择器 在尝试了不起作用的第三方库 无内容 后 我尝试自己实现它 并且得到了相同的结果 最奇怪的是 Environment getExternalStorageDirectory listFiles 返回空值 这是