我正在尝试使用android,我已经到了想要将内容保存到内存并从中读取的地步,但我有点卡住了。我找到了这篇文章http://developer.android.com/guide/topics/data/data-storage.html#filesInternal,因为它建议我创建了虚拟方法:
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);
上面的线条是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());
引发NPE,我甚至添加了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
进入Androidmanifest.xml
我已经在Context ctx中创建了方法并传递了,但是我的ctx结束了null,我怎么能得到这个变量?将它设置为哪个值?
答案 0 :(得分:1)
通过大量的Google搜索,我发现您需要将Context传递给您在onCreate
方法Context ctx = getApplicationContext();
中初始化的方法,然后将其传递给需要它的应用程序的其余部分。
答案 1 :(得分:0)
不要忘记隐含的'this'。您调用测试方法的Context派生对象可能为null。
- 编辑 -
或者你在应用程序的生命周期中过早地调用它。我相信在你打电话之前你需要完全初始化 - 最早可能是你的onCreate方法。