我想读取一个文本文件并解析字符串,直到eof ..还有一个代码片段.. programs.txt在资产目录下
public void insert_programs() throws FileNotFoundException {
BufferedReader bfr = null;
try {
bfr = new BufferedReader(new
InputStreamReader(getAssets().open("programs.txt"))); // <-- NPE occurs on that line
} catch (IOException e) {
e.printStackTrace();
}
Scanner pgm = new Scanner(bfr);
pgm.useDelimiter("*{3}");
while (pgm.hasNext()) {
String str = pgm.next();
process(str);
}
}
记录
03-14 18:05:34.936: E/AndroidRuntime(467): at dalvik.system.NativeStart.main(Native Method)
03-14 18:05:34.936: E/AndroidRuntime(467): Caused by: java.lang.NullPointerException
03-14 18:05:34.936: E/AndroidRuntime(467): at android.content.ContextWrapper.getAssets(ContextWrapper.java:74)
03-14 18:05:34.936: E/AndroidRuntime(467): at c.theworld.com.nikhil.Database.insert_programs(Database.java:40)
答案 0 :(得分:1)
将此添加到您的代码中:
bfr = new BufferedReader(new
InputStreamReader(this.getAssets().open("programs.txt")));
答案 1 :(得分:0)
看起来你的BufferedReader将为null。你有没有尝试将扫描器代码放在try catch块中。如果您的程序获得IOException,则bfr将为null,您将获得NPE。
public void insert_programs() throws FileNotFoundException {
BufferedReader bfr = null;
try {
bfr = new BufferedReader(new
InputStreamReader(getAssets().open("programs.txt")));
Scanner pgm = new Scanner(bfr);
pgm.useDelimiter("*{3}");
while (pgm.hasNext()) {
String str = pgm.next();
process(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
答案 2 :(得分:0)
方法ContextWrapper.getAssets()
正在抛出NullPointerException
。您正在扩展ContextWrapper
(或扩展它的另一个类),看起来它还没有正确初始化。 ContextWrapper
中的基础Context
为空。