Я буквально просмотрел stackoverflow, пытаясь найти правильный ответ ... может быть, я делаю что-то неправильно. Я делаю свое первое более сложное приложение, то есть приложение для викторины для детей. Я хочу, чтобы оценки сохранялись в файле highscorestable.txt, который позже будет открыт, обновлен, прочитан и т. Д. Файл должен существовать после закрытия приложения, чтобы повторно использовать его в следующей игре и так далее. Я использовал http://developer.android.com/guide/topics/data/data-storage.html. Я хочу сохранить файл в памяти телефона. У меня есть следующий код:Как сохранить (навсегда) файл в android и восстановить данные позже?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_high_scores);
Intent intent = getIntent();
String userData;
scores =(EditText)findViewById(R.id.scores);
if(intent.getStringExtra(EndScreen.EXTRA_MESSAGE)!=null)
{
userData = intent.getStringExtra(EndScreen.EXTRA_MESSAGE);
}
else
{
userData="";
}
String temp = "";//to widzi przy zaladowaniu
String output = "";
String g="";
//FIRST READING not necessary?
try{
FileInputStream fin = openFileInput("highscorestable.txt");
int c;
while((c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
fin.close();
}
catch (Exception e) {
// e.printStackTrace();
}
if(temp.equals(null))
{
temp = "";
}
//output = userData; //+ temp;
FileOutputStream fos;//WRITING
try {
fos = openFileOutput("highscorestable.txt", Context.MODE_PRIVATE);
fos.write(userData.getBytes());
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
//READING2
try{
FileInputStream fin = openFileInput("highscorestable.txt");
int c;
while((c = fin.read()) != -1){
g = g + Character.toString((char)c);
}
fin.close();
output= output+g;
scores.setText(output);
}
catch (Exception e) {
}
Намерение сам работает, на самом деле все работает, однако fileitself не последний. Я имею в виду, когда я начинаю новую игру, старые данные не восстанавливаются. Как это исправить?
Можете ли вы подтвердить предположение, запустив ваше приложение на эмуляторе, а затем исследуете хранилище с помощью браузера файлов DDMS? Создается ли файл и есть ли он во время запуска приложения во второй раз? Если это, вероятно, вы ошиблись в логике восстановления данных. – Egor
OutputStream out = null; try { out = new BufferedOutputStream (новый FileOutputStream ("highscorestable.txt")); } catch (Exception e) { } Вы пробовали BufferedOutputStream, поскольку он позволяет добавлять существующий файл .i thinkn fileoutputstream записывает только данные, не добавляя их, поэтому ваши предыдущие данные не существуют. –
Благодарим вас за ответы. Я попытаюсь с выходным потоком, как это делается здесь: http://stackoverflow.com/questions/5818406/append-data-in-existing-file-in-android-and-read-it. -> CHECKED, его тоже не работает. Джавад Зеб, что ты имеешь в виду? @Egor - DDMS - я должен посмотреть. – user3795517