新 android OS 5.0.1 中的文件读取错误
File read error in new android OS 5.0.1
我正在处理 android 中的文件。我使用了下面的代码,它在使用 OS 4.4.2 的注释 2 中运行良好。但是,当我在 OS 5.0.1 (Galaxy S4) 中 运行 时出现如下错误报告。我的代码中发生了什么?你能建议我解决它吗
private boolean checkAudioFile()
{
ArrayList<String> datacheck=null;
try{
String filepath = Environment.getExternalStorageDirectory().getPath();
String filename=filepath+"/" + FILE_FOLDER + "/" + "file_list.txt" ;
BufferedReader in = new BufferedReader(new FileReader(filename));
String audio_name;
datacheck = new ArrayList<String>();
while ((audio_name = in.readLine()) != null) {
datacheck.add(audio_name);
}
in.close();
} catch (IOException e) {
System.out.println("File Read Error");
}
if(datacheck.isEmpty())
return true;
else
return false;
}
这是我在 OS 5.0.1
中的错误
11-16 20:42:48.483: I/System.out(16967): File Read Error
11-16 20:42:48.483: D/AndroidRuntime(16967): Shutting down VM
11-16 20:42:48.483: E/AndroidRuntime(16967): FATAL EXCEPTION: main
11-16 20:42:48.483: E/AndroidRuntime(16967): Process: com.example.readfileapp, PID: 16967
11-16 20:42:48.483: E/AndroidRuntime(16967): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.readfileapp/com.example.readfileapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.isEmpty()' on a null object reference
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.access0(ActivityThread.java:177)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.os.Handler.dispatchMessage(Handler.java:102)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.os.Looper.loop(Looper.java:145)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.main(ActivityThread.java:5942)
11-16 20:42:48.483: E/AndroidRuntime(16967): at java.lang.reflect.Method.invoke(Native Method)
11-16 20:42:48.483: E/AndroidRuntime(16967): at java.lang.reflect.Method.invoke(Method.java:372)
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
11-16 20:42:48.483: E/AndroidRuntime(16967): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.isEmpty()' on a null object reference
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.example.readfileapp.MainActivity.checkAudioFile(MainActivity.java:622)
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.example.readfileapp.MainActivity.onCreate(MainActivity.java:172)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.Activity.performCreate(Activity.java:6289)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
11-16 20:42:48.483: E/AndroidRuntime(16967): ... 10 more
您需要执行空检查。
你的 ArrayList 可以是空的也可以是 null 然后你不能调用 isEmpty()
改成这样:
if(datacheck!=null && datacheck.isEmpty())
希望对您有所帮助。
我正在处理 android 中的文件。我使用了下面的代码,它在使用 OS 4.4.2 的注释 2 中运行良好。但是,当我在 OS 5.0.1 (Galaxy S4) 中 运行 时出现如下错误报告。我的代码中发生了什么?你能建议我解决它吗
private boolean checkAudioFile()
{
ArrayList<String> datacheck=null;
try{
String filepath = Environment.getExternalStorageDirectory().getPath();
String filename=filepath+"/" + FILE_FOLDER + "/" + "file_list.txt" ;
BufferedReader in = new BufferedReader(new FileReader(filename));
String audio_name;
datacheck = new ArrayList<String>();
while ((audio_name = in.readLine()) != null) {
datacheck.add(audio_name);
}
in.close();
} catch (IOException e) {
System.out.println("File Read Error");
}
if(datacheck.isEmpty())
return true;
else
return false;
}
这是我在 OS 5.0.1
中的错误11-16 20:42:48.483: I/System.out(16967): File Read Error
11-16 20:42:48.483: D/AndroidRuntime(16967): Shutting down VM
11-16 20:42:48.483: E/AndroidRuntime(16967): FATAL EXCEPTION: main
11-16 20:42:48.483: E/AndroidRuntime(16967): Process: com.example.readfileapp, PID: 16967
11-16 20:42:48.483: E/AndroidRuntime(16967): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.readfileapp/com.example.readfileapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.isEmpty()' on a null object reference
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.access0(ActivityThread.java:177)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.os.Handler.dispatchMessage(Handler.java:102)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.os.Looper.loop(Looper.java:145)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.main(ActivityThread.java:5942)
11-16 20:42:48.483: E/AndroidRuntime(16967): at java.lang.reflect.Method.invoke(Native Method)
11-16 20:42:48.483: E/AndroidRuntime(16967): at java.lang.reflect.Method.invoke(Method.java:372)
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
11-16 20:42:48.483: E/AndroidRuntime(16967): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.isEmpty()' on a null object reference
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.example.readfileapp.MainActivity.checkAudioFile(MainActivity.java:622)
11-16 20:42:48.483: E/AndroidRuntime(16967): at com.example.readfileapp.MainActivity.onCreate(MainActivity.java:172)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.Activity.performCreate(Activity.java:6289)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
11-16 20:42:48.483: E/AndroidRuntime(16967): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
11-16 20:42:48.483: E/AndroidRuntime(16967): ... 10 more
您需要执行空检查。
你的 ArrayList 可以是空的也可以是 null 然后你不能调用 isEmpty()
改成这样:
if(datacheck!=null && datacheck.isEmpty())
希望对您有所帮助。