我读了&写用户名&使用我的应用程序到内部存储的android设备的密码。我成功写入设备,但在阅读时我收到错误。在应用程序开始时我读了那个文件,然后我得到“应用程序(...)意外停止了。请再试一次。”“强制关闭”按钮,应用程序关闭。我尝试了不同的阅读方式,但都表现出相同的结果。我将数据写为用户名+“\ n”+ passwrd +“\ n”。这是读取数据的代码:
private static String ReadFromFile(String fileName) {
String text = "";
FileInputStream fis = null;
byte[] fileData;
try {
StringBuffer sb = new StringBuffer();
int c = 0;
fis = AppContext.openFileInput(fileName);
if (fis.available() != 0) {
fileData = new byte[fis.available()];
c = fis.read(fileData);
Log.i(TAG, "Read Byes = " + c );
java.util.StringTokenizer stk = new java.util.StringTokenizer(new String(fileData), "\n");
text = stk.toString();
} else
throw new IOException("fis.available() <= 0"); /*
c = (char)fis.read();
while (c != -1){
if (c != -1)
sb.append(c);
c = (char)fis.read();
}
text = sb.toString();
*/
fis.close();
} catch (FileNotFoundException e) {
text = "null " + e.getMessage();
} catch (IOException e) {
text = "null " + e.getMessage();
} finally {
fis = null;
}
return text;
}
/*
try {
StringBuffer sb = new StringBuffer();
RandomAccessFile raf = new RandomAccessFile(ENC_LOGIN_FILE, "r");
while ((str1 = raf.readLine()) != null){
sb.append(str1);
}
str1 = sb.toString();
} catch (FileNotFoundException e) {
errorMessage = "File Not Found: " + e.getMessage();
//e.printStackTrace();
} catch (IOException ioe) {
errorMessage = "IOExcp: " + ioe.getMessage();
//e.printStackTrace();
}*/
没有使用路径,文件名直接写入&amp;读取文件。我从我尝试使用StringTokenizer的地方查看了Problem facing in reading file from Internal memory of android。
任何人都可以帮助我知道我哪里出错了。设置了以下权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.READ_SYNC_STATS"></uses-permission>
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
另外,我如何调试应用程序。如何检查Log中写入的数据。如果我使用SOP,它在哪里显示 - 它不会显示在控制台窗口中?请帮帮我,我是android开发的新手。 还有一点需要澄清:我的座右铭是存储用户名和密码,使用户无法直接读取它们。我已经使用过MODE_PRIMITIVE。他们是否需要使用JSONObject来保存这些数据。我在几个网站上看过JSON&amp; API,但无法弄清楚为什么以及应该在哪里使用它。使用MODE_PRIMITIVE我相信即使用户也无法读取文件。只有我的应用程序可以读取它。然后我认为我不应该使用JSON。如果我错了,请纠正我。
非常感谢任何帮助。
感谢。
答案 0 :(得分:1)
建议:
如果您只保存用户名和密码,请使用SharedPreferences而不是将数据保存在文件中。这是一种非常安全的方式,而且非常麻烦。
使用此博客文章如何使用共享首选项:
http://saigeethamn.blogspot.com/2009/10/shared-preferences-android-developer.html
答案 1 :(得分:0)
fis = AppContext.openFileInput(fileName);
fileData = new byte[fis.available()];
java.util.StringTokenizer stk =
new java.util.StringTokenizer(new String(fileData), "\n");
在我看来,您正在尝试使用未初始化的数组作为输入创建新的String
。您已经要求数组为特定大小,但您没有做任何事情来将数据读入数组。 (请注意,available()
仅询问可以无阻塞地读取的数据大小;它实际上并不读取数据。为此,您需要read()
方法。)
试试这个:
fis = AppContext.openFileInput(fileName);
fileData = new byte[fis.available()];
fis.read(fileData);
java.util.StringTokenizer stk =
new java.util.StringTokenizer(new String(fileData), "\n");
您应该检查fis.read()
的返回值,但请尝试查看它是否可以让您进一步发展。