繁体   English   中英

SharedPreferences不会永久保存数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM