2015-11-24 3 views
3

Мне нужно сделать выборщик файлов в моем приложении, попробовав сторонние библиотеки, которые не работают (без содержимого), я попытался реализовать его сам, и у меня есть такой же результат.Environment.getExternalStorageDirectory(). ListFiles() возвращает null

wierdest Дело в том, что

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(); 
    } 
} 

Спасибо,

+0

я проверить на эмулятор, и он работает правильно, проблема только с моим телефоном .. (нексус 5) –

+0

Оказывается, что это право независимо от того, я попробовал другую библиотеку третьей стороны, что после спросив, разрешаю ли я моему приложению получать доступ к sdcard (даже если у меня есть разрешение, установленное в моем манифесте), хорошо отображался мой телефон. –

ответ

0

увидеть, если ваш SDCard установлен;

Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) 
Смежные вопросы