Environment.getExternalStorageDirectory (). ListFiles () returns null

I need to make a file collector in my application, after I tried third-party libraries that did not work (without content), I tried to implement it myself, and I have the same result.

The worst thing is that

Environment.getExternalStorageDirectory().listFiles() 

returns null

here is my code

 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,

+4
source share
2 answers

Faced the same problem. This can be caused by many reasons, but I had the wrong permissions. For APIs above 23, you must add runtime permissions as well as in the manifest. Hope this helps someone.

0
source

Check if your SDCard is installed;

  Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) 
0
source

Source: https://habr.com/ru/post/1236695/


All Articles