Logcat在Android Studio中发生意外错误

u59ebvdq  于 2022-11-25  发布在  Android
关注(0)|答案(2)|浏览(211)

我正在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);
    }
}

有人能帮忙吗,我在谷歌上搜索了一下,但我还没有找到解决办法。

3wabscal

3wabscal1#

替换代码

File root;
root = new File(FilePath);

使用单线

File root = new File(FilePath);

错误在于您试图首先初始化文件,然后设置其路径。

zf9nrax1

zf9nrax12#

正如您可以看到我的屏幕截图,原因是您的“FilePath”为空。

at java.io.File.<init>(File.java:283)

请检查String FilePath = getIntent().getStringExtra("path");不应为空。

相关问题