【问题标题】:Logcat is making an unexpected error in Android StudioLogcat 在 Android Studio 中发生意外错误
【发布时间】:2022-11-18 01:56:52
【问题描述】:

我正在 android studio 中制作一个文件管理器应用程序,一切似乎都正常,但是当我在模拟器中打开该应用程序时,它会关闭并显示:“应用程序一直在停止”。 logcat 给出如下错误: X

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

有人可以帮忙吗,我用谷歌搜索了但我还没有找到解决方案。

【问题讨论】:

    标签: android-studio crash


    【解决方案1】:

    替换代码

    File root;
    root = new File(FilePath);
    

    用单行

    File root = new File(FilePath);
    

    错误是您试图首先初始化文件,然后在其上设置路径。 此外,尽量保持变量的 Java 命名约定,因此您可以将 FilePath 替换为 filePath

    【讨论】:

    • 不..这是因为 FilePath 是空的..
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      相关资源
      最近更新 更多