[英]SharedPreferences does not permanently save data
我在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");
}
我在asynctask中,更确切地说在“ onPostExecute”中调用此函数:
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));
}
您有什么建议要给我吗?
检查您的密钥sharedpreference密钥区分大小写在这里我看到两个diff密钥
creditiAPP creditiApp
做以上改变就可以了
editor2.apply();
editor2.commit();
仅执行其中一项。 两者都不是,只有一个。 由于您似乎是从主应用程序线程调用此代码,因此请使用apply()
。
您也有Pavan指出的错误 。 通过使用static final String
字段作为常量定义一次static final String
,而不是尝试在多个位置使用相同的文字字符串,可以避免此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.