【发布时间】:2015-01-03 22:53:37
【问题描述】:
所以我试图在 Android 上创建一个待办事项列表,我可以在其中添加项目,然后动态显示在列表中。因此,当我在文本字段中输入文本,然后按添加按钮时,列表将使用我刚刚创建的项目展开。这一切都很顺利,但如果我将应用程序完全从我的内存堆栈中取出然后重新启动它就不行了。当我重新打开应用程序时,列表仅包含一项,即我在关闭应用程序之前添加到列表中的最后一项。这是我的代码:
package be.oefeningen.filestorage;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.view.View.OnClickListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.io.InputStreamReader;
public class FileStorageActivity extends ListActivity implements OnClickListener {
private ArrayList<String> values=new ArrayList<String>();
InputStream inputStream;
String line;
@Override
public void onClick(View v) {
EditText editText=(EditText) findViewById(R.id.editText);
String tekst=editText.getText().toString()+"\n";
FileOutputStream outputStream;
try {
outputStream=openFileOutput("todoitems",MODE_PRIVATE);
outputStream.write(tekst.getBytes());
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
inputStream = openFileInput("todoitems");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
line = reader.readLine();
if (line != null){
values.add(line);
} else {
inputStream.close();
}
}catch (Exception e)
{
e.printStackTrace();
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
setListAdapter(adapter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
inputStream = openFileInput("todoitems");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
line = reader.readLine();
while (line != null){
values.add(line);
line = reader.readLine();
}
inputStream.close();
}catch (Exception e)
{
e.printStackTrace();
}
setContentView(R.layout.activity_file_storage);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
setListAdapter(adapter);
}
}
【问题讨论】:
-
Prem 的答案是正确的......但你真的想使用数据库,而不是纯文本文件。
-
是的,它有效,但通常在写入值之前开始读取。所以我需要转动屏幕以获得正确的值。我想速度慢是这些文件的一个缺点。
-
性能是您最不关心的问题。为什么不使用数据库?轻松多了。
-
是的,这只是一个练习。不是以后真正使用的东西。