2012-03-14 124 views
1

我想讀一個文本文件,並解析字符串,直到eof..here是一個代碼段時,遇到了一個空指針exeception .. 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) 
+2

您是否願意將您的代碼放在發生NPE的地方? (像'// < - NPE發生在該行上的註釋) – 2012-03-14 12:43:09

+0

你能提供你看到的輸出嗎? – csturtz 2012-03-14 12:43:31

+0

你的問題到底是什麼? – csturtz 2012-03-14 12:46:57

回答

0

方法ContextWrapper.getAssets()被扔NullPointerException。您正在擴展ContextWrapper(或擴展它的另一個類),並且它看起來像沒有正確初始化。 ContextWrapper內的基地Context爲空。

0

看起來像你的BufferedReader將會爲null。你有沒有嘗試把掃描器代碼放在try catch塊中?如果你的程序得到IOException,那麼bfr將爲空,你將得到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(); 
    } 

    } 
1

添加到這個代碼:

bfr = new BufferedReader(new 
      InputStreamReader(this.getAssets().open("programs.txt"))); 
+0

是不是「這」暗示? – Mayank 2012-03-14 12:48:13