[英]My Android app is freezing when I call bufferedReader.readLine();
[英]app crashed when trying to call BufferedReader.readLine()
我正在研究必須解析文件中文本的android應用。
我的Parser.java類中具有以下方法:
private String getText(String fileName) {
BufferedReader buffer = null;
File file = new File(fileName);
try{
buffer = new BufferedReader( new FileReader(file));
}
catch (FileNotFoundException e){
System.out.println("Could not find file" + fileName);
}
String everything = null;
try{
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = buffer.readLine()) != null){
builder.append(line);
builder.append(System.lineSeparator());
line = buffer.readLine();
}
everything = builder.toString();
//buffer.close();
}
catch (IOException e) {
e.printStackTrace();
return null;
}
finally {
if ((buffer != null)) {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return everything;
}
每當在while循環中調用buffer.readLine()方法時,我都會遇到問題。
我通過以下路徑信息傳遞File對象是這樣的:
"/Users/aa/Desktop/parser.txt"
現在,我已經看了看堆了許多帖子,並在網上以試圖解決這個問題,並使用從幾個解決方案已經嘗試這個和這個 ,但有沒有運氣。 這是我得到的錯誤堆棧跟蹤的摘錄。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.BufferedReader.readLine()' on a null object reference
at com.example.allanaraujo.parser.Parser.getText(Parser.java:40)
at com.example.allanaraujo.parser.Parser.parse(Parser.java:19)
at com.example.allanaraujo.parser.OpenDocument.uploadButton(OpenDocument.java:62)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我確信該文件的路徑是正確的,因為我在調試時檢查了它。 我不確定在這里還要考慮什么。
編輯:我在OS X而不是Windows或Linux上進行開發
您似乎正在嘗試將本地(可能是Windows)文件路徑傳遞到設備或仿真器。
"/Users/aa/Desktop/parser.txt"
這行不通。 您必須在Android項目中包含該文件。 您可以將其放在資產文件夾中,並按以下方式訪問它:
AssetManager manager = context.getAssets();
InputStream input = manager.open("parser.txt");
或者,您可以將其放在原始文件夾中並按以下方式訪問它:
InputStream input = context.getResources().openRawResource(R.raw.parser);
之所以在BufferedReader上獲取空值,是因為系統無法在Android項目中找到該文件路徑。 然后,如注釋中所指出的,您將無法正確處理該異常並繼續嘗試讀取流。
有兩件事:
while ((line = buffer.readLine()) != null){
builder.append(line);
builder.append(System.lineSeparator());
line = buffer.readLine(); //remove this line
}
您需要刪除注釋行,因為您要調用readLine兩次。 當您確實正確初始化了緩沖區后,您將跳過行。
為了防止出現空指針異常,您應該:
if(buffer == null) return "buffer not ready"; //or something like that.
String everything = null;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.