gpt4 book ai didi

java - 尝试从目录创建文件列表时应用程序崩溃

转载 作者:行者123 更新时间:2023-12-02 03:42:30 31 4
gpt4 key购买 nike

[我是新来的]你好,我正在尝试创建一个录音机应用程序。我已经弄清楚如何录制音频和播放音频。现在,我只希望我的应用程序显示特定目录(例如“/Documents/MyApp”)中包含的所有文件的列表。这样我就可以看到我刚刚创建的文件。现在,我只是想列出来自外部存储的所有文件。问题是,应用程序在启动时崩溃。当我删除有关读取外部存储的行时,它工作得很好。

我在网上尝试了很多不同的方法,都非常相似。但它们都会导致相同的结果:应用程序在启动时崩溃。代码如下:

public class FileAndDirectoryActivity extends AppCompatActivity {

private ArrayList<String> mNames = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_and_directory);
File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
File[] arrayFiles = directory.listFiles();
for (File file : arrayFiles){
mNames.add(file.getName());
}
initRecyclerView();

}
private void initRecyclerView() {
RecyclerView recyclerView = findViewById(R.id.recyclerview);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(mNames, this);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
}

我希望应用程序能够通过回收器 View 列出目录中包含的所有文件的名称。为此,我创建了一个名为“mNames”的 arrayList,在发送到我的 RecyclerViewAdapter 之前获取所有文件的名称。但应用程序在启动时崩溃...

最佳答案

您的应用可能会崩溃,因为它无法完成 onCreate (必须完成 per the Activity lifecycle ),因为您没有请求查看存储的权限。

您需要在代码周围进行检查,以查看用户是否有权使用外部存储。您还需要处理用户未授予权限的情况。更多文档为 here 。您的代码应修改为如下所示:

public class FileAndDirectoryActivity extends AppCompatActivity {

private static final int PERMISSION_REQUEST = 1000;
private ArrayList<String> mNames = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_and_directory);
//Check if we have the permission to read storage
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//We dont have the permission, so request it.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSION_REQUEST);
}
//We already have permission
else{
permissionExists();
}

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PERMISSION_REQUEST){
if(resultCode == RESULT_OK){
permissionExists();
}
else{
//handle error
}
}
}

private void initRecyclerView() {
RecyclerView recyclerView = findViewById(R.id.recyclerview);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(mNames, this);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}

private void permissionExists(){
File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
File[] arrayFiles = directory.listFiles();
for (File file : arrayFiles) {
mNames.add(file.getName());
}
initRecyclerView();
}
}

关于java - 尝试从目录创建文件列表时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826408/

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