SharedPreferences不会永久保存数据
问题描述:
我对SharedPreferences函数中的数据进行了更改,并且当我在同一个活动中调用数据时,数据是最新的,但是当交换活动不是最新时。SharedPreferences不会永久保存数据
我使用这个功能来更新数据:
public static String setVal(Context context, String val){
String LOGIN = "Login";
SharedPreferences pref = context.getSharedPreferences(LOGIN, Context.MODE_PRIVATE);
SharedPreferences.Editor editor2 = pref.edit();
editor2.remove("creditiApp");
editor2.putString("creditiApp",val);
editor2.apply();
editor2.commit();
String LOGIN2 = "Login";
SharedPreferences pref2 = context.getSharedPreferences(LOGIN2, Context.MODE_PRIVATE);
return pref2.getString("creditiApp","0");
}
我在“onPostExecute”更准确地说调用这个函数在的AsyncTask,:
protected void onPostExecute(String result) {
String[] results = result.split("///---");
if(results[0].equals("true")){
String LOGIN = "Login";
SharedPreferences pref = getSharedPreferences(LOGIN, Context.MODE_PRIVATE);
String crediti22 = pref.getString("creditiAPP","no");
codiceEdit.setText(results[1]);
Bitmap bit = img.getBitmapFromURL(results[2]);
Bitmap bit2 = img.getRoundedCornerBitmap(bit,500);
imgTonda.setImageBitmap(bit2);
titolo.setText(results[3]);
autore.setText(results[4]);
int creditiNecessari = Integer.valueOf(results[5]);
int creditiDisponibiliDB = Integer.valueOf(results[6]);
int creditiDisponibiliApp = Integer.valueOf(crediti22);
if(creditiDisponibiliDB == creditiDisponibiliApp){
crediti.setText(getString(R.string.pubbCrediti)+" "+creditiNecessari);
crediti2.setText(getString(R.string.pubbCrediti2)+" "+creditiDisponibiliApp);
}else{
String str = setVal(getApplicationContext(),String.valueOf(creditiDisponibiliDB));
Log.d("crediti",str);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View header = navigationView.getHeaderView(0);
TextView crediti_view = (TextView) header.findViewById(R.id.creditiMenu);
crediti_view.setText(getString(R.string.creditiDisp)+" "+creditiDisponibiliDB+" "+getString(R.string.crediti));
crediti.setText(getString(R.string.pubbCrediti)+" "+creditiNecessari);
crediti2.setText(getString(R.string.pubbCrediti2)+" "+creditiDisponibiliDB);
}
if(creditiDisponibiliDB >= creditiNecessari){
guadagna.setVisibility(View.GONE);
download.setVisibility(View.VISIBLE);
download.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(pubblicita.this,home.class);
intent.putExtra("codice",codice);
startActivity(intent);
finish();
}
});
}else{
guadagna.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
intro.setVisibility(View.GONE);
showProgress(true);
pubb.setVisibility(View.VISIBLE);
showProgress(false);
closePubb.setVisibility(View.GONE);
barTimer.setVisibility(View.VISIBLE);
timeText.setVisibility(View.VISIBLE);
barTimer.startAnimation(an);
startTimer(1);
}
});
}
intro.setVisibility(View.VISIBLE);
}else{
crediti.setVisibility(View.GONE);
crediti2.setVisibility(View.GONE);
autore.setVisibility(View.GONE);
guadagna.setVisibility(View.GONE);
titolo.setText(getString(R.string.errorePubblicita));
intro.setVisibility(View.VISIBLE);
}
showProgress(false);
mAuthTask = null;
}
还可以在日志中的数据更新,但拨打其他活动时,数据不会更新:
@Override
protected void onStart(){
super.onStart();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View header = navigationView.getHeaderView(0);
TextView nome_view = (TextView) header.findViewById(R.id.nome_view);
TextView email_view = (TextView) header.findViewById(R.id.email_view);
TextView crediti_view = (TextView) header.findViewById(R.id.creditiMenu);
String LOGIN = "Login";
SharedPreferences pref = getSharedPreferences(LOGIN, Context.MODE_PRIVATE);
String nome = pref.getString("nomeAPP","ciao");
String cognome = pref.getString("cognomeAPP","ciao");
String email = pref.getString("emailAPP","ciao");
String crediti = pref.getString("creditiAPP","ciao");
String nome_completo = nome+" "+cognome;
nome_view.setText(nome_completo);
email_view.setText(email);
crediti_view.setText(getString(R.string.creditiDisp)+" "+crediti+" "+getString(R.string.crediti));
}
您对gi有什么建议吗?是我吗?
答
检查你的钥匙sharedpreference键的情况下这里大小写我看了两眼差异键
creditiAPP creditiApp
做上述变化,将工作
答
editor2.apply();
editor2.commit();
只做其中之一。不是两个,只有一个。由于您似乎是从主应用程序线程调用此代码,请使用apply()
。您也有the bug that Pavan points out。通过定义字符串一次,您可以避免这个问题,使用static final String
字段作为常量,而不是试图在几个地方使用相同的文字字符串。
非常感谢,我对这个微不足道的错误感到羞耻 – peppinoibra
为了避免这样的问题,你必须把键,标签asconstant,并用它在你想要的地方 – Pavan
是的,再次感谢。 – peppinoibra