2015-08-22 6 views
-2

Интересно, почему мой метод SharedPreference не сохраняет мои данные.
Вот мой кодОбщие предпочтения не сохраняют мои данные

Функция экономии (я называю эту функцию каждый раз после выполнения моего процесса):

public void save(double tamt) { 
    SharedPreferences saveamount = getSharedPreferences("TotalAmount" , MODE_PRIVATE); 
    SharedPreferences.Editor editor = saveamount.edit(); 
    editor.clear(); 
    editor.putString("LastAmount",String.valueOf(tamt)); 
    editor.apply(); 
} 

я вызываю метод чтения внутри моего onCreate() метода:

public void loadAmt() { 
    SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0); 
    String amt = loadamount.getString("TotalAmount",""); 
    if (amt.matches("")){ 
     return; 
    } 
    else { 
     total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0")); 
     et.setText(String.valueOf(total)); 
    } 
} 

ли из-за метода сохранения или чтения?
Каждый раз, после выхода из моей программы и ее повторного открытия, данные не отображаются.

ответ

3

Потому что вы сохраняете

editor.putString("LastAmount",String.valueOf(tamt)); 

Но вы извлекаете

String amt = loadamount.getString("TotalAmount","0"); 

Они разные ключи.
Вы должны получить

String amt = loadamount.getString("LastAmount",""); 

И это:

total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0")); 
et.setText(String.valueOf(total));} 

должен быть изменен на

// USELESS, you already have the string in amt 
//total = Double.parseDouble(loadamount.getString("TotalAmount" ,"0")); 
et.setText(String.valueOf(amt));} 
+1

Большое вам спасибо! –

0

Ваша ошибка здесь TotalAmount ваше имя файла и вы как раз пытается получить строка с ключом TotalAmount, который не существует, поскольку вы сохранили свое значение с помощью ключа LastAmount. Так что просто изменить метод загрузки

public void loadAmt() { 
    SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0); 
    String amt = loadamount.getString("LastAmount",""); 
    if (amt.matches("")){ 
     return; 
    } else { 
     total = Double.parseDouble(loadamount.getString("LastAmount" ,"0")); 
     et.setText(String.valueOf(total)); 
    } 
} 
0

В loadAmt() метод ключ не подходит для извлечения информации предпочтений, сделать так:

public void loadAmt() 
{ 
    SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,0); 
    String amt = loadamount.getString("LastAmount",""); //change here to LastAmount 
    if (amt.matches("")){ 
     return; 
    } 
    else { 
    total = Double.parseDouble(loadamount.getString("LastAmount" ,"0")); //change here to LastAmount 
    et.setText(String.valueOf(total));} 

    } 
0

После будет ваш код:

public void save(double tamt) { 
      SharedPreferences saveamount = getSharedPreferences("TotalAmount" , Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = saveamount.edit(); 
      editor.clear(); 
      editor.putString("LastAmount",String.valueOf(tamt)); 
      editor.commit();} 

Я использую функцию чтения в моей OnCreate функции

public void loadAmt() 
{ 
    SharedPreferences loadamount = getSharedPreferences("TotalAmount" ,Context.MODE_PRIVATE); 
    String amt = loadamount.getString("LastAmount",""); 
    if (amt.matches("")){ 
     return; 
    }else { 
    total = Double.parseDouble(loadamount.getString("LastAmount" ,"0")); 
    et.setText(String.valueOf(total));} 

    } 
Смежные вопросы