我正在尝试编写和读取一个充满单词的文本文件并将其添加到ArrayList中。稍后使用ArrayList从程序的另一部分在TextView中显示文本。但是当我运行程序并打开它的特定部分时,则没有任何东西。 ArrayList只是空的。我没有任何例外,但由于某种原因,它不起作用。请帮帮我。
我似乎没有写文件的问题:
TextView txt = (TextView)findViewById(R.id.testTxt);
safe = txt.getText().toString();
try {
FileOutputStream fOut = openFileOutput("test.txt", MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
try {
osw.write(safe);
osw.flush();
osw.close();
Toast.makeText(getBaseContext(), "Added to favorites", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException ex){
Log.e("Exception", "File write failed: ");
}
} catch (IOException e) {
Log.e("Exception", "File write failed: ");
}
但我认为问题在于文件阅读。我做了一些" Log.d"并发现一切正常,直到InputStreamReader行:
public favHacks() {
testList = new ArrayList<String>();
try {
//Works fine till here
InputStreamReader inputStreamReader = new InputStreamReader(openFileInput("test.txt"));
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String receiveString = "";
while ( (receiveString = bufferedReader.readLine()) != null )
{
testList.add(receiveString);
}
bufferedReader.close();
}
catch (FileNotFoundException ex) {
Log.d("login activity", "File not found: ");
} catch (IOException ex) {
Log.d("login activity", "Can not read file: ");
}
}
答案 0 :(得分:0)
如果您要保存的密钥值集合相对较少,则应使用SharedPreferences API。
http://developer.android.com/training/basics/data-storage/shared-preferences.html
如果你想写/读文件,或做任何可以阻止主线程的操作尝试使用另一个线程,比如当你试图将数据保存在文件中时,或者如果你有多个线程(一个用于保存,一个用于读取)。
https://developer.android.com/training/multiple-threads/index.html
在你的代码中,名为favHacks的方法可以返回一个ArrayList,其中包含所有字符串的列表
//
public ArrayList<String> readFromFile(String file){
ArrayList<String> mArrayList= new ArrayList<String>();
//read from file here
return mArrayList;
}
但正如我之前所说,你需要在新线程中阻止UI线程的操作。 https://developer.android.com/training/multiple-threads/communicate-ui.html
而且我认为最好的方法是使用Asynk任务