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

做上述变化,将工作

+0

非常感谢,我对这个微不足道的错误感到羞耻 – peppinoibra

+0

为了避免这样的问题,你必须把键,标签asconstant,并用它在你想要的地方 – Pavan

+0

是的,再次感谢。 – peppinoibra

editor2.apply(); 
editor2.commit(); 

只做其中之一。不是两个,只有一个。由于您似乎是从主应用程序线程调用此代码,请使用apply()。您也有the bug that Pavan points out。通过定义字符串一次,您可以避免这个问题,使用static final String字段作为常量,而不是试图在几个地方使用相同的文字字符串。