Java 将文件保存到android内存

Java 将文件保存到android内存,java,android,Java,Android,我正在用android做实验,我想把一些东西保存到内存中并从中读取,但我有点被卡住了。我找到了这篇文章,正如它所建议的,我创建了虚拟方法: public void test(){ String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.wri

我正在用android做实验,我想把一些东西保存到内存中并从中读取,但我有点被卡住了。我找到了这篇文章,正如它所建议的,我创建了虚拟方法:

public void test(){

    String FILENAME = "hello_file";
    String string = "hello world!";

    FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
    fos.write(string.getBytes());
    fos.close();

}
总是抛出NullPointerException,有人知道我遗漏了什么吗?可能是Androidmanifest.xml中的一些权限

问题更新:

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
线上的trows NPE。我的类是抽象的,它的扩展活动,我不知道这是否相关

堆栈跟踪:

01-29 22:30:44.575: ERROR/TEST(458): java.lang.NullPointerException
01-29 22:30:44.575: ERROR/TEST(458): java.lang.RuntimeException: java.lang.NullPointerException
似乎任何IO操作都会抛出NPE,我也尝试过:

try {
            File myDir = new File(getFilesDir().getAbsolutePath());
            String s = "";

            FileWriter fw = new FileWriter(myDir + "/Test.txt");
            fw.write("Hello World");
            fw.close();

            BufferedReader br = new BufferedReader(new FileReader(myDir + "/Test.txt"));
            s = br.readLine();

            // Set TextView text here using tv.setText(s);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

File myDir = new File(getFilesDir().getAbsolutePath());
我甚至还加了一句

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

转换为Androidmanifest.xml


我已经在上下文ctx中创建了方法和传递,但我的ctx最终为空,我如何获得这个变量?将其设置为哪个值?

不要忘记隐式的“this”。调用测试方法的上下文派生对象可能为null

--编辑--


要么是这样,要么是在应用程序生命周期的早期调用。我相信在调用此函数之前,您需要完全初始化-最早的可能是onCreate方法。

通过大量的谷歌搜索,我发现您需要将上下文传递给您的方法,您可以在
onCreate
方法
Context ctx=getApplicationContext()中初始化该方法并将其传递给需要它的应用程序的其余部分。

哪行抛出NPE?对.write()的调用?或者在其他地方?它在哪一行抛出
NullPointerException
?换句话说,什么对象是空的?@jameshouse@commonware我更新了问题,那么你能发布堆栈跟踪吗?NPE必须发生在对openFileOutput()的调用中,但查看具体位置可能很有趣。我不太明白你在说什么,但我的主类应用程序中有onCreate方法。我必须在里面做什么?@c0mrade-你什么时候调用你的测试方法?活动源自上下文,因此您可以直接调用openFileOutput,但必须等待上下文完全初始化后才能调用它。因此,您最早可以在onCreate中调用您的测试方法。例如,您无法在活动构造函数中调用。