我正在尝试使用名为 displayData() 的方法显示存储在 SQLite 数据库中的数据。按钮上有一个 onClickListener,每当在该 onClickListener 内调用该方法时,它都会完美执行。虽然我希望在应用程序启动时显示数据。当我直接在 onCreate 或 onStart 方法中调用相同的方法时,我在应用程序重新启动时收到 OutOfMemory 错误。如何在应用程序启动时调用该方法而不出现此错误?
MainActivity
DatabaseHelper dbHelper;
ListView listView;
EditText taskInput;
Button addButton;
ArrayList<String> taskList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
taskList = new ArrayList<String>();
listView = (ListView) findViewById(R.id.listView);
taskInput = (EditText) findViewById(R.id.taskInput);
addButton = (Button) findViewById(R.id.addButton);
dbHelper = new DatabaseHelper(this);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//put data to Database
String getInput = taskInput.getText().toString();
if (taskInput.length() != 0) {
putData(getInput);
taskInput.setText("");
displayData();
} else {
Toast.makeText(MainActivity.this, "You must put something!", Toast.LENGTH_SHORT).show();
}
}
});
}
public void displayData(){
Cursor data = dbHelper.fetchData();
ToDoAdapter cursorAdapter = new ToDoAdapter(this, data);
if(data.getCount() != 0){
taskList.clear();
while(data.moveToNext()){
taskList.add(data.getString(1));
listView.setAdapter(cursorAdapter);
}
}
else{
Toast.makeText(this, "Error!", Toast.LENGTH_SHORT).show();
}
}
public void putData(String newEntry){
boolean insertData = dbHelper.addData(newEntry);
if(insertData == true){
Toast.makeText(this, "Successfully Added Task", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this, "No Data Added", Toast.LENGTH_SHORT).show();
}
}
最佳答案
您正在 while 循环的每次迭代中设置适配器,您需要在每次迭代中将数据添加到列表中,并在完成后将其设置为 while 循环外部的适配器。检查下面的代码
while(data.moveToNext()){
taskList.add(data.getString(1));
}
listView.setAdapter(cursorAdapter);
关于java - 从 SQLiteDatabase 显示数据时出现 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54090793/