getFilesDir() 导致空指针异常

2023-12-05

我正处于学习 Java 的早期阶段,但希望有人能解释我在这里做错了什么,大量的谷歌搜索让我头晕目眩。

我一直在关注一个教程,该教程展示了如何将 ArrayList 保存到文本文件,然后获取详细信息。

我收到以下错误:-

01-10 19:00:37.092 16897-16897/uk.co.c2digital.futurefoto E/AndroidRuntime: FATAL EXCEPTION: main
Process: uk.co.c2digital.futurefoto, PID: 16897
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{uk.co.c2digital.futurefoto/uk.co.c2digital.futurefoto.viewLocations}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference
at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:201)
at uk.co.c2digital.futurefoto.fileControl.<init>(fileControl.java:23)
at uk.co.c2digital.futurefoto.viewLocations.<init>(viewLocations.java:18)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1572)
at android.app.Instrumentation.newActivity(Instrumentation.java:1083)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2312)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474) 
at android.app.ActivityThread.access$800(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:155) 
at android.app.ActivityThread.main(ActivityThread.java:5696) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 
01-10 19:05:37.142 16897-16897/uk.co.c2digital.futurefoto D/Process: killProcess, pid=16897
01-10 19:05:37.162 16897-16897/uk.co.c2digital.futurefoto D/Process: com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:138 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690 

这是当我的文件 viewLocations.java 运行以下命令(导入后等)时引起的

 public class viewLocations extends AppCompatActivity {

    fileControl filer = new fileControl();
    ArrayList imgArray = filer.getSaved();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_locations);

      }

文件控制();位于一个名为“file Control.java”的单独文件中

public class fileControl extends AppCompatActivity {


    // Set filename
    String filename = getFilesDir() + "/savedList.txt";

    /**
     * Following code gets a list of saved image paths from device
     * @return

     */


    public ArrayList getSaved() {


        // Create variable for storing each line as it's read
        String line;

        // Clear imgArray ready for new entries
        ArrayList newList = new ArrayList();
        newList.clear(); // ensure new array is clear before continuing

        // Try to open file
        try {
            BufferedReader input = new BufferedReader(new FileReader(filename));
            if (!input.ready()) {
                // If input file is not ready, show log error
                Log.d("getSavedList", "Unable to open save file, input not ready");
            } else {

                // If input file is ready, read each line one at a time and add to array
                while ((line = input.readLine()) != null) {
                    newList.add(line);
                }
                input.close();

                // Run verification on results to ensure no duplicates or deleted images are recorded
                newList = listVerify(newList);

            }
        } catch (IOException e) {
            Log.d("getSavedList", "Read save file failed: " + e);
        }

        return newList;
    }

这里有很多问题。首先,Activity课程,或者根据您的情况AppCompatActivity类通常用于呈现带有 UI 的屏幕,而不是执行谨慎的任务。你的getSaved()函数可能应该只驻留在实际容纳您的 UI 的 Activity 中。

Second, AppCompatActivity类不能静态地执行上下文操作。换句话说,您的 Activity 需要先实例化,然后才能使用其超类方法,在本例中getFilesDir().

归结起来就是你需要初始化filename在生命周期函数中,可能onCreate()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getFilesDir() 导致空指针异常 的相关文章

随机推荐

  • 将新号码添加到 ABAddressBook 中的现有 ABRecord - iPhone

    我正在尝试通过我的应用程序更新地址簿中现有联系人的内容 但不需要用户界面 场景是这样的 1 用户输入号码和姓名 2 应用程序检查该姓名是否在联系人列表中 3 如果是 则检查该号码是否是该姓名的联系人之一 4 如果没有 则将其添加到该名称中
  • PHP array_push 将一个数组推入另一个数组

    我需要使用 array push 或类似的东西在另一个数组中添加一个数组 我想要实现的目标将如下所示 years array 2017 gt array Value01 Value02 2016 gt array Value03 在另一个数
  • 如何使用Java将字符串中单词的第一个字母大写?

    示例字符串 one thousand only two hundred twenty seven 如何更改字符串的第一个字符为大写字母而不更改任何其他字母的大小写 更改后应该是 One thousand only Two hundred T
  • Node js multer 文件上传不起作用。 req.file 和 req.files 始终未定义

    我正在尝试将文件上传到我的服务器 但是req file and req files在我的 POST REST 端点上始终未定义 我尝试上传的内容是 dat 文件 我期待 json 响应 这是我的代码 服务器端 var express req
  • 如何更改iphone sdk中的日期格式

    我收到来自 Webservices Date 的响应 例如 2012 08 17T00 00 00 我只想显示日期 例如 17 08 2012 如何更改日期格式并删除该时间 String froms web service ws NSStr
  • 创建一个快捷方式,并将参数添加到程序路径中

    这是代码 如果我右键单击新的 Lnk 并删除引号 它就可以工作 from C Windows System32 control exe name Microsoft Windowsupdate to C Windows System32 c
  • 纯 Ajax 请求和传统 Ajax 请求是否可以在本机/混合移动应用程序上实现?

    我知道使用 JSONP 技术http en wikipedia org wiki JSONP我们可以做一个跨域的 Ajax 请求 但对于这个问题来说 这并不算 纯粹和传统 我只是想知道本机 混合应用程序是否也适用 同源策略 http en
  • Clearcase:如何将特定文件从一个视图合并到另一个视图中,以避免出现“邪恶双胞胎”场景?

    我有一个文件需要放入不同的分支 我如何从命令行执行此操作 一切似乎都适合合并 其中文件已经存在于两个分支中 您必须先合并父目录 以便文件显示在目标分支的目录中 此时 新文件的大小将为零 然后您可以合并文件本身 执行这两项操作的最简单方法是通
  • 通过局域网连接到 Visual Studio 调试 IIS Express 服务器

    我有一个在 VS2012 中开发的测试 ASP NET MVC3 应用程序 当我开始调试时 通过请求从主机访问应用程序http localhost
  • 向量排序/唯一/擦除与复制到 unordered_set 的性能

    我有一个函数 可以将网格中点列表的所有邻居获取到一定距离 这涉及大量重复项 我邻居的邻居又 我 我一直在尝试几种不同的解决方案 但我不知道哪种更有效 下面是一些代码 演示了两种并行运行的解决方案 一种使用 std vector sort u
  • 为什么 Spark DataFrame 创建错误数量的分区?

    我有一个包含 2 列的 Spark 数据框 col1 and col2 scala gt val df List 1 a toDF col1 col2 df org apache spark sql DataFrame col1 int c
  • 在 Velocity 模板中使用动态变量

    我正在使用速度模板生成电子邮件模板 在这里我想为每个 标签 创建表 并将相应的值作为表数据 我正在传递一个列表标签 其中包含标签的详细信息 包括 tagName 我使用它为每个标签传递相应的列表 如果 tagName test 我将测试表的
  • Java 邮件初始访问检查失败

    我正在使用 Java Mail API 我收到这个奇怪的错误 初始访问检查失败 我的配置看起来不错 URL 用户 密码等 只是不明白为什么会出现此消息 550 5 7 1 Initial access check failure DEBUG
  • java没有执行系统命令

    在下面的程序中 我将名称指定为 don 因此该命令将搜索活动目录 所有的名字都以don开头 如唐纳德等 但是 line2 变量在从 reader 对象赋值后变为 null 并且它永远不会进入循环 我究竟做错了什么 仅供参考 当我在命令行上给
  • XML/HTML 标签中是否允许有空格?

    我知道如何在 XML 和 HTML 的文本节点中处理空格 但我不确定标记元素本身内部的空格 显然 标签内部使用空格来分隔属性 但是在 之前有空格是否有效 例如 lt foo gt lt foo gt Or even
  • 如何获取集合中的随机范围数

    我有 100 条记录 1 gt 100 我想在其中随机获取 50 条记录 在 java 中该怎么做 谢谢 Set
  • 传递与参数类型不同的类型

    如果我有一个变量a声明者A a和一个方法m with void m B b 有什么办法可以调用m a 会工作 或者这永远不会起作用 因为a属于类型A and b类型的B If A延伸B 它可以作为参数传递给该函数 如果没有并且A包含适合的值
  • Android 杀死了小米、华为等公司的后台服务

    我需要让我的服务势不可挡 我尝试在启动命令上返回 START STICKY 它在模拟器上运行良好 但是 当从我的设备 小米 mi5s Android 7 上的任务管理器中删除该应用程序时 它不会再次创建自身 Override public
  • C++ - 数组是指针吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C 指针和数组的区别 Is an array in C a pointer 你能澄清一下吗 Thanks 不 但只要您需要它 它就可以衰减为指针 void foo1 char c int main c
  • getFilesDir() 导致空指针异常

    我正处于学习 Java 的早期阶段 但希望有人能解释我在这里做错了什么 大量的谷歌搜索让我头晕目眩 我一直在关注一个教程 该教程展示了如何将 ArrayList 保存到文本文件 然后获取详细信息 我收到以下错误 01 10 19 00 37