我正在使用json数据创建列表视图。当用户离线时,我想在listview中显示数据。我已将json数据存储在android sdcard中。当用户离线并在listview中显示时,我会检索数据。问题是,当我从目录中读取文件时,它会显示带有问号的黑色菱形并将其存储在数组列表中。这种类型的"����t��*"我的问题是如何从Arraylist中删除这种类型的字符串。有人请帮忙
保存数据:
public void saveMyData()
{
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getFilesDir(),"")+"cachefile.txt"));
out.writeObject(al.toString());
Toast.makeText(getApplicationContext(), "Data Saved..",Toast.LENGTH_LONG).show();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这是我的检索代码。
String fileContent = "";
try {
String currentLine;
BufferedReader bufferedReader;
FileInputStream fileInputStream = new FileInputStream(getFilesDir()+"cachefile.txt");
bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream,"UTF-8"));
while ((currentLine = bufferedReader.readLine()) != null) {
fileContent += currentLine + '\n';
}
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
Log.d("FAILED","THOS IS NULL");
fileContent = null;
}
Log.d("SUCESS","SUCESS BUDDYY"+fileContent);
答案 0 :(得分:1)
从广义上讲,问题是您使用ObjectOutputStream
将数据写入文件,但BufferedReader
将其重新读入。ObjectOutputStream
是专门设计用于允许将对象和本机数据类型写入流中,以便可以通过ObjectInputStream
读回来以相同方式重新构建对象。这种编码不是人类可读的,通常包含额外的字符作为字段分隔符。
我不知道al
是什么,但由于您在编写之前调用toString()
,我可以假设您希望在文件中找到实际字符串,您可以阅读。为此,您可能希望使用PrintStream
和PrintStream.println()
方法而不是ObjectOutputStream
。