gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:49 25 4
gpt4 key购买 nike

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

最奇怪的是

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

谢谢,

最佳答案

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

关于android - Environment.getExternalStorageDirectory().listFiles() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33891781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com