Android - openFileInput() NullPointerException

我正在尝试在我的 android 应用程序中生成一个代码作为字符串并将其保存到一个文本文件中。当您按下共享按钮时,应该从文本文件中读取代码并将其复制到剪贴板。


我想我不了解有关活动/上下文的内容。当然,我阅读了有关它的文档,但我无法找出问题所在。希望你们能帮助我!


FileSystem.java


package com.niclasjaksch.shoppinglist;


import android.content.Context;


import androidx.appcompat.app.AppCompatActivity;


import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;


class FileSystem extends AppCompatActivity {


    static String filename = "shoppinglist_code.txt";


    void Create() {

        try {

            FileOutputStream fOut = openFileOutput(filename, Context.MODE_PRIVATE);

            String str = Utility.randomString(10);

            fOut.write(str.getBytes());

            fOut.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    String Read() {

        String result = "";

        try {

            FileInputStream fin = openFileInput(filename);

            int c;

            while( (c = fin.read()) != -1){

                result += c;

            }

            fin.close();

        } catch (Exception e) {

            System.out.println("An error occurred.");

            e.printStackTrace();

        }

        return result;

    }

    void Clear() {

        try {

            File dir = getFilesDir();

            File file = new File(dir, filename);

            file.delete();

        } catch (Exception e) {

            System.out.println("An error occurred.");

            e.printStackTrace();

        }

    }


}

Share.java


package com.niclasjaksch.shoppinglist;


import android.content.ClipData;


import androidx.appcompat.app.AppCompatActivity;


class Share extends AppCompatActivity {


    android.content.ClipboardManager clipboardManager = null;

    FileSystem fs = new FileSystem();


    void Share() {

        String code = fs.Read();

        if(code == "" || code == null) {

            fs.Create();

            code = fs.Read();

        }

        ClipData clipData = ClipData.newPlainText("Source Text", code);

        clipboardManager.setPrimaryClip(clipData);

    }

}

侃侃无极
浏览 102回答 2
2回答

慕盖茨4494581

AppCompatActivity仅为实际 UI 工作创建子类,您将在其中使用startActivity()或开始该活动startActivityForResult()。将这些方法移动到真实的活动中,例如MainActivity,并摆脱Share和FileSystem类。

眼眸繁星

首先,您不应该扩展AppCompatActivityforFileSystem和Share。发生的事情是将openFileOutput对象FileSystem( this) 作为上下文。实际上,它不算作单独的活动。您可以按照 CommonWare 的建议删除类FileSystem和Share,并将它们的功能移动到MainActivity. 或者您可以显式地context从MainActivity.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java