我需要紧急帮助。我有一个应用程序,几个小时前工作很好,写入和读取内部存储文件。现在我回家去我的设备上运行它开始强行关闭!这对我来说根本没有任何意义。我唯一的猜测是它试图读取的文件现在不知道了吗?我试图在应用程序的许多位置读取和写入此文件。以下是我在LogCat中收到的错误。
06-21 18:14:34.666: W/dalvikvm(5349): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-21 18:14:34.682: E/AndroidRuntime(5349): FATAL EXCEPTION: main
06-21 18:14:34.682: E/AndroidRuntime(5349): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wglxy.example.dash1/com.wglxy.example.dash1.F2Activity}: java.lang.NullPointerException
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.os.Looper.loop(Looper.java:130)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-21 18:14:34.682: E/AndroidRuntime(5349): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 18:14:34.682: E/AndroidRuntime(5349): at java.lang.reflect.Method.invoke(Method.java:507)
06-21 18:14:34.682: E/AndroidRuntime(5349): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:850)
06-21 18:14:34.682: E/AndroidRuntime(5349): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
06-21 18:14:34.682: E/AndroidRuntime(5349): at dalvik.system.NativeStart.main(Native Method)
06-21 18:14:34.682: E/AndroidRuntime(5349): Caused by: java.lang.NullPointerException
06-21 18:14:34.682: E/AndroidRuntime(5349): at java.io.Reader.<init>(Reader.java:65)
06-21 18:14:34.682: E/AndroidRuntime(5349): at java.io.InputStreamReader.<init>(InputStreamReader.java:122)
06-21 18:14:34.682: E/AndroidRuntime(5349): at java.io.InputStreamReader.<init>(InputStreamReader.java:59)
06-21 18:14:34.682: E/AndroidRuntime(5349): at com.wglxy.example.dash1.Grid.readRawText(Grid.java:214)
06-21 18:14:34.682: E/AndroidRuntime(5349): at com.wglxy.example.dash1.F2Activity.onCreate(F2Activity.java:75)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-21 18:14:34.682: E/AndroidRuntime(5349): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
06-21 18:14:34.682: E/AndroidRuntime(5349): ... 11 more
在包含readRawText方法的Grid类中,它抱怨某一行:InputStreamReader inputReader = new InputStreamReader(his)。 “fis”在上面被宣布为特定目录。
以下是readRawText .....的方法的代码。
public static String readRawText(Context context)
{
FileInputStream fis = null;
try {
fis = new FileInputStream("/data/data/com.wglxy.example.dash1/app_myDir/output.txt");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
InputStreamReader inputReader = new InputStreamReader(fis);
BufferedReader buffReader = new BufferedReader(inputReader);
String line;
StringBuilder textFile = new StringBuilder();
try
{
while((line = buffReader.readLine()) != null)
{
textFile.append(line);
// textFile.append('\n');
}
}
catch (IOException e)
{
return null;
}
return textFile.toString();
}
}
由于它给我的错误是一个空指针错误我一直在想,不知何故文件可能已经消失或者什么......如果有人可以帮我解决这个问题,我会非常感激。我只是花了一整天才使这个应用程序正常工作,现在却没有。这简直令人沮丧!你认为你已经完成了一些事情,但你没有......
如果有人能告诉我如何解决这个问题或给我一些宝贵的建议,我感激不尽。
此处更新我的WRITEGRIDS方法在F2Activity ....
public void writeGrids(List<Grid> grids) throws IOException
{
String data;
FileOutputStream fos = null;
try
{
File dir = getDir("myDir", Context.MODE_PRIVATE);
Log.d("SEE",dir.getAbsolutePath());
File myFiles = new File(dir, "output.txt");
fos = new FileOutputStream(myFiles);
for(Grid grid : grids)
{
data = grid.getGridNickName() + ";" + grid.getGridName() + ";" +
grid.getFirstName() + ";" + grid.getLastName() + ";" +
grid.getPassword()+ ";" + grid.getLoginURI() + ";";
fos.write(data.getBytes());
}
}
catch (Exception e)
{
System.err.println("Error: " + e.getMessage());
}
fos.close();
}
所以我猜我需要在我的代码顶部放一些文件目录等.....但它应该不必每次运行程序时都要创建一个新文件吗?如果我听起来无知,我道歉。我对Android很新,到目前为止它已经爆炸了。
答案 0 :(得分:1)
您在行
上收到NullPointerExceptionInputStreamReader inputReader = new InputStreamReader(fis);
初始化FileInputStream时,您还会捕获FileNotFoundException。我的猜测是抛出了FileNotFoundException,因为文件根本不存在,导致引用变量“fis”被赋值为null。
output.txt来自哪里?它在哪里创建?您的应用中是否存在创建文件/app_myDir/output.txt但此时尚未到达的位置?
另外,要简单地解决强制关闭问题,您需要检查“fis”是否为空。如果它不为null,则继续处理(即使您相信文件存在,这也是一种很好的做法):
if (fis != null) {
InputStreamReader inputReader = new InputStreamReader(fis);
BufferedReader buffReader = new BufferedReader(inputReader);
String line;
StringBuilder textFile = new StringBuilder();
try
{
while((line = buffReader.readLine()) != null)
{
textFile.append(line);
// textFile.append('\n');
}
}
catch (IOException e)
{
return null;
}
return textFile.toString();
} else
return null;