В нынешнем виде у меня есть TableLayout, который я заполняю на основе определенных столбцов и каждой строки из файла .db. Таблица заполняется на основе одного файла .db, который я теперь буду называть x. Каждый раз, когда действие воссоздается, мой метод заполнения (что заполняет таблицу) проверяет, что находится в x.db. Каждая строка в таблице имеет те же 3 столбца, но если вы долго нажимаете на строку, то вы можете увидеть каждую деталь этой строки (детали рассчитывают один из отображаемых столбцов, и расчет отличается для каждой строки).
Отсюда у пользователя есть возможность рассчитать общую сумму, сохранить текущий файл .db, загрузить другой файл .db или очистить файл .db и начать заново. Вот как я работаю с сохранением и загрузкой, о чем мой вопрос (мне пришлось изменить некоторые имена переменных, чтобы иметь возможность публиковать)
case R.id.save:
SAVE_DIALOG = R.id.save;
AlertDialog.Builder save_alert = new AlertDialog.Builder(this,3);
edit = new EditText(this);
edit.setSingleLine();
save_alert.setTitle("Please enter a name to save as");
save_alert.setView(edit);
save_alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if(edit.getText().toString().trim().isEmpty()){
Toast toast = Toast.makeText(getApplicationContext(), "Name must not be blank", Toast.LENGTH_LONG);
toast.show();
return;
}
else {
File makeDirectory = new File("data/data/com.project.project/databases/stored_x");
if(!makeDirectory.isDirectory())
makeDirectory.mkdir();
FileChannel fromChannel = null;
FileChannel toChannel = null;
try {
File input = new File("data/data/com.project.project/databases/x.db");
//File output = new File("data/data/com.project.project/databases/stored_x/"+ edit.getText() +".db");
File output = new File("data/data/com.project.project/databases/stored_x/"+ edit.getText());
FileInputStream in = new FileInputStream(input);
FileOutputStream out = new FileOutputStream(output);
fromChannel = in.getChannel();
toChannel = out.getChannel();
fromChannel.transferTo(0, fromChannel.size(), toChannel);
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
fromChannel.close();
}
catch (IOException e) {
e.printStackTrace();
}
try {
toChannel.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
});
save_alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog saveAlert = save_alert.create();
saveAlert.setCanceledOnTouchOutside(true);
saveAlert.show();
break;
После того, как пользователь нажимает кнопку сохранения, появляется диалоговое окно с предупреждением, запрашивающее у пользователя имя для сохранения файла как. После того, как пользователь ввел имя и нажал «ОК», файл копируется и сохраняется в папке, которую я создаю в «data / data / com.project.project / database / store_x /», поэтому я просто делаю копию .db файл и положить его куда-нибудь еще.
Для загрузки я делаю что-то похожее на сохранение, за исключением того, что я выбрал файл, просматриваю список и заменяю текущий файл x.db этим файлом, теперь называем его x.db.
Все отлично работает и будет хорошо работать для конечных пользователей, но мне просто любопытно, если это так, как это должно быть сделано.