我正在Android Studio中制作一个文件管理器应用程序,一切似乎都正常,但当我在模拟器中打开应用程序时,它会关闭并说:“应用程序持续停止”。logcat给出如下错误:
Caused by: java.lang.NullPointerException
at java.io.File.<init>(File.java:283)
at com.roboproffa.filemanager.FileListActivity.onCreate(FileListActivity.java:33)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8269)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
我认为错误在此代码的第32或33行:
package com.roboproffa.filemanager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
public class FileListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_list);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
TextView noFiles = (TextView) findViewById(R.id.noFiles);
String FilePath = getIntent().getStringExtra("path");
File root;
root = new File(FilePath);
File[] filesAndFolders = root.listFiles();
if (filesAndFolders == null || filesAndFolders.length == 0) {
noFiles.setVisibility(View.VISIBLE);
return;
}
noFiles.setVisibility(View.INVISIBLE);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new MyAdapter(getApplicationContext(), filesAndFolders));
if(checkPermission()) {
//permission allowed
Intent intent = new Intent(FileListActivity.this, FileListActivity.class);
String path = Environment.getExternalStorageDirectory().getPath();
intent.putExtra("path", path);
startActivity(intent);
}else {
//permission not allowed
requestPermission();
}
}
//permission to access
private boolean checkPermission() {
int result = ContextCompat.checkSelfPermission(FileListActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(result == PackageManager.PERMISSION_GRANTED){
return true;
}else{
return false;
}
}
private void requestPermission() {
if(ActivityCompat.shouldShowRequestPermissionRationale(FileListActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Toast.makeText(FileListActivity.this, "Storage permission is required, please allow in settings", Toast.LENGTH_SHORT).show();
}
ActivityCompat.requestPermissions(FileListActivity.this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 111);
}
}
有人能帮忙吗,我在谷歌上搜索了一下,但我还没有找到解决办法。
2条答案
按热度按时间3wabscal1#
替换代码
使用单线
错误在于您试图首先初始化文件,然后设置其路径。
zf9nrax12#
正如您可以看到我的屏幕截图,原因是您的“FilePath”为空。
请检查
String FilePath = getIntent().getStringExtra("path");
不应为空。