2016-02-29 58 views
1

所以我有两个活动,一个包含RadioButtons,EditText等所有元素,另一个只包含传递数据的TextViews。Android SharedPreferences不会保存数据

工作得很好,当我尝试保存该数据时,问题就开始了。在StackOwerflow上跟随了许多YouTube教程和示例,但它不会保存数据。

总之,这里的第一个活动的代码:

RadioGroup radioGrupa; 
    RadioButton imperial, metric; 
    EditText visinaCM, visinaFT, visinaINC, tezina , bodyfat, tdee, bmi, bmr, ffmi; 
    TextView rezultatTDEE, textVisinaCM, textVisinaFI, rezultatTezina, rezultatBMI, rezultatFFMI, rezultatBMR, rezultatBF; 
    Button spremiRezultat; 
    int onStartCount = 0; 



    public void radioStatistikeInputMetric(View view){ 
     boolean checked = ((RadioButton) view).isChecked(); 
     switch (view.getId()){ 
      case R.id.radioStatistikeMetric: 
       if (checked) 
       // TU OVO SREDI!!! 
        //textVisinaCM.setVisibility(View.VISIBLE); 
        // visinaCM.setVisibility(View.VISIBLE); 
        //textVisinaFI.setVisibility(View.GONE); 
        //visinaFT.setVisibility(View.GONE); 
        // visinaINC.setVisibility(View.GONE); 


       spremiRezultat.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 

           Intent intent = new Intent(getApplicationContext(), AppLayoutMain.class); 

            intent.putExtra("tdeeInput", tdee.getText().toString()); 
            intent.putExtra("bodyFatInput", bodyfat.getText().toString()); 
            intent.putExtra("tezinaMetricInput", tezina.getText().toString()); 
            intent.putExtra("visinaMetricInput", visinaCM.getText().toString()); 
            intent.putExtra("bmiInput", bmi.getText().toString()); 
            intent.putExtra("bmrInput", bmr.getText().toString()); 
            intent.putExtra("ffmiInput", ffmi.getText().toString()); 

           startActivity(intent); 
         } 
       }); 
       break; 
     } 
    } 

    public void radioStatistikeInputImperial(View view){ 
     boolean checked = ((RadioButton) view).isChecked(); 
     switch (view.getId()){ 
      case R.id.radioStatistikeImperial: 
       if (checked) 
        //textVisinaCM.setVisibility(View.GONE); 
       // visinaCM.setVisibility(View.GONE); 
       // textVisinaFI.setVisibility(View.VISIBLE); 
      // visinaFT.setVisibility(View.VISIBLE); 
      // visinaINC.setVisibility(View.VISIBLE); 

        spremiRezultat.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
           Intent intent = new Intent(getApplicationContext(), AppLayoutMain.class); 
           intent.putExtra("tdeeInput", tdee.getText().toString()); 
           intent.putExtra("bodyFatInput", bodyfat.getText().toString()); 
           intent.putExtra("tezinaImperialInput", tezina.getText().toString()); 
           intent.putExtra("visinaImperialInputFT", visinaFT.getText().toString()); 
           intent.putExtra("visinaImperialInputINC", visinaINC.getText().toString()); 
           intent.putExtra("bmiInput", bmi.getText().toString()); 
           intent.putExtra("bmrInput", bmr.getText().toString()); 
           intent.putExtra("ffmiInput", ffmi.getText().toString()); 
           startActivity(intent); 

         } 
        }); 
       break; 
     } 
    } 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_statistike_input_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


     if (savedInstanceState != null){ 
      String inputi = savedInstanceState.getString("INPUTI"); 
      rezultatTDEE.setText(inputi); 
     } 

     onStartCount = 1; 
     if (savedInstanceState == null) 
     { 
      this.overridePendingTransition(R.anim.anim_slide_in_left, 
        R.anim.anim_slide_out_left); 
     } else { 
      onStartCount = 2; 
     } 


// RADIO 
     radioGrupa = (RadioGroup) findViewById(R.id.radioGrupaStatistike); 
     imperial = (RadioButton) findViewById(R.id.radioStatistikeImperial); 
     metric = (RadioButton) findViewById(R.id.radioStatistikeMetric); 
//VISINA 
     visinaCM = (EditText) findViewById(R.id.editTextStatistikeVisinaCM); 
     visinaFT = (EditText) findViewById(R.id.editTextStatistikeVisinaFEET); 
     visinaINC = (EditText) findViewById(R.id.editTextStatistikeVisinaINCH); 
//TEŽINA 
     tezina = (EditText) findViewById(R.id.editTextStatistikeTezina); 
//BODYFAT 
     bodyfat = (EditText) findViewById(R.id.editTextStatistikeBF); 
//TDEE 
     tdee = (EditText) findViewById(R.id.editTextStatistikeTDEE); 
//BMI 
     bmi = (EditText) findViewById(R.id.editTextStatistikeBMI); 
//BMR 
     bmr = (EditText) findViewById(R.id.editTextStatistikeBMR); 
//FFMI 
     ffmi = (EditText) findViewById(R.id.editTextStatistikeFFMI); 
//BUTTON 
     spremiRezultat = (Button) findViewById(R.id.buttonStatistikeInputSpremi); 
//REZULTATI 
     rezultatTDEE = (TextView) findViewById(R.id.textViewStatistikeRezultatTDEE); 
     textVisinaCM = (TextView) findViewById(R.id.textViewStatistikeRezultatVisina); 
     textVisinaFI = (TextView) findViewById(R.id.textViewStatistikeVisinaFeetInch); 
     rezultatTezina = (TextView) findViewById(R.id.textViewStatistikeRezultatTezina); 
     rezultatBMI = (TextView) findViewById(R.id.textViewStatistikeBMI); 
     rezultatBMR = (TextView) findViewById(R.id.textViewStatistikeBMR); 
     rezultatFFMI = (TextView) findViewById(R.id.textViewStatistikeFFMI); 
     rezultatBF = (TextView) findViewById(R.id.textViewStatistikeRezultatBodyFat); 

    } 

    public void save(View view){ 
     SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString("bmi", bmi.getText().toString()); 
     editor.putString("bmr", bmr.getText().toString()); 

     editor.commit(); 

    } 


    @Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
     if (onStartCount > 1) { 
      this.overridePendingTransition(R.anim.anim_slide_in_right, 
        R.anim.anim_slide_out_right); 

     } else if (onStartCount == 1) { 
      onStartCount++; 
     } 

    } 

Sharedpreferences位于save方法。

现在,这里的第二个活动代码:

private DrawerLayout mDrawer; 
    private ActionBarDrawerToggle drawerToggle; 
    private Toolbar toolbar; 
    int onStartCount = 0; 
    ProgressDialog progress; 
    NavigationView nvDrawer; 
    DrawerLayout dlDrawer; 
    android.support.v7.widget.CardView karticaStatistike; 
    TextView tdeeRezultat, bodyFatRezultat, bmiRezultat, bmrRezultat, ffmiRezultat, tezinaMetricRezultat, visinaMetricRezultat, tezinaImperialRezultat, visinaFTImperialRezultat, visinaINCImperialRezultat, ciljTreningRezultat, razinaTreningRezultat, preporukaTreningRezultat, oneRMPotisakSKlupeRezultat, oneRMCucanjRezultat, oneRMMrtvoDizanjeRezultat, ciljPrehranaRezultat; 
    public static final String DEFAULT="N/A"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_app_layout_main); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 



     karticaStatistike = (android.support.v7.widget.CardView) findViewById(R.id.Statiske); 


     // STATISTIKE - PASSAN DATA 

     Intent intent = getIntent(); 
     String tdee = intent.getStringExtra("tdeeInput"); 
     String bf = intent.getStringExtra("bodyFatInput"); 
     String bmi = intent.getStringExtra("bmiInput"); 
     String bmr = intent.getStringExtra("bmrInput"); 
     String ffmi = intent.getStringExtra("ffmiInput"); 
     String tezinaMetric = intent.getStringExtra("tezinaMetricInput"); 
     String visinaMetric = intent.getStringExtra("visinaMetricInput"); 
     String tezinaImperial = intent.getStringExtra("tezinaImperialInput"); 
     String visinaImperial1 = intent.getStringExtra("visinaImperialInputFT"); 
     String visinaImperial2 = intent.getStringExtra("visinaImperialInputINC"); 
     tdeeRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatTDEE); 
     tdeeRezultat.setText(tdee); 
     bodyFatRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatBodyFat); 
     bodyFatRezultat.setText(bf); 
     bmiRezultat = (TextView) findViewById(R.id.textViewStatistikeBMI); 
     bmiRezultat.setText(bmi); 
     bmrRezultat = (TextView) findViewById(R.id.textViewStatistikeBMR); 
     bmrRezultat.setText(bmr); 
     ffmiRezultat = (TextView) findViewById(R.id.textViewStatistikeFFMI); 
     ffmiRezultat.setText(ffmi); 
     tezinaMetricRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatTezina); 
     tezinaMetricRezultat.setText(tezinaMetric); 
     visinaMetricRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatVisina); 
     visinaMetricRezultat.setText(visinaMetric); 



// SMISLI ŠTA ĆEŠ S OVIM, IZAZIVA KONFLIKT U VISINI I TEŽINI, PROBAJ S NEKIM IFOM 
     // tezinaImperialRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatTezina); 
     // tezinaImperialRezultat.setText(tezinaImperial); 
     //visinaFTImperialRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatVisina); 
     //visinaFTImperialRezultat.setText(visinaImperial1 + "'" + " " + visinaImperial2 + "''"); 
     // STATISTIKE - KRAJ PASSANJA 



// TRENING - PASSAN DATA 
     String oneRMBench = intent.getStringExtra("oneRMBenchInput"); 
     String oneRMSquat = intent.getStringExtra("oneRMSquatInput"); 
     String oneRMDead = intent.getStringExtra("oneRMDeadInput"); 
     String ciljTreninga = intent.getStringExtra("vrijednostSpinneraCilj"); 
     String razinaIskustva = intent.getStringExtra("vrijednostSpinneraRazinaIskustva"); 

     oneRMPotisakSKlupeRezultat = (TextView) findViewById(R.id.textViewTreningRezultat1RMPotisakSKlupe); 
     oneRMPotisakSKlupeRezultat.setText(oneRMBench); 
     oneRMCucanjRezultat = (TextView) findViewById(R.id.textViewTreningRezultat1RMCucanj); 
     oneRMCucanjRezultat.setText(oneRMSquat); 
     oneRMMrtvoDizanjeRezultat = (TextView) findViewById(R.id.textViewTreningRezultat1RMMrtvoDizanje); 
     oneRMMrtvoDizanjeRezultat.setText(oneRMDead); 

     ciljTreningRezultat = (TextView) findViewById(R.id.textViewTreningRezultatCilj); 
     ciljTreningRezultat.setText(ciljTreninga); 
     razinaTreningRezultat = (TextView) findViewById(R.id.textViewTreningRezultatRazinaIskustva); 
     razinaTreningRezultat.setText(razinaIskustva); 


// PREHRANA - PASSAN DATA 

     String prehrana = intent.getStringExtra("vrijednostSpinnera"); 

     ciljPrehranaRezultat = (TextView) findViewById(R.id.textViewPrehranaCiljRezultat); 
     ciljPrehranaRezultat.setText(prehrana); 
     tdeeRezultat = (TextView) findViewById(R.id.textViewPrehranaTDEE); 
     tdeeRezultat.setText(tdee); 




     dlDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawerToggle = setupDrawerToggle(); 

     dlDrawer.setDrawerListener((DrawerLayout.DrawerListener) drawerToggle); 


     mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     nvDrawer = (NavigationView) findViewById(R.id.nvView); 
     setupDrawerContent(nvDrawer); 

     onStartCount = 1; 
     if (savedInstanceState == null) 
     { 
      this.overridePendingTransition(R.anim.anim_slide_in_left, 
        R.anim.anim_slide_out_left); 
     } else { 
      onStartCount = 2; 
     } 

    } 

    public void load(View view){ 
     SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE); 
     String bmiSaved = sharedPreferences.getString("bmi", "DEFAULT"); 
     String bmrSaved = sharedPreferences.getString("bmr", "DEFAULT"); 

     if (bmiSaved.equals(DEFAULT) || bmrSaved.equals(DEFAULT)){ 
      Toast.makeText(AppLayoutMain.this, "No Data Was Found", Toast.LENGTH_LONG).show(); 
     } else 
      Toast.makeText(AppLayoutMain.this, "Data Loaded Sucessfully", Toast.LENGTH_LONG).show(); 
      bmiRezultat.setText(bmiSaved); 
      bmrRezultat.setText(bmrSaved); 
    } 

Sharedpreferences在load方法。

我对大码量的apollogize,但我有很多数据需要显示和保存。

如果有人可以帮忙,我会很感激!

+0

这样,当你运行load(View v)时,哪个烤面包会显示出来; – Hansie

+0

如果没有输入数据,则显示第一个 – DaxHR

+0

我看到的一件事是您不调用save方法? – Hansie

回答

0

这里是它如何工作的:

.... 
String tel = editText.getText(); 
.... 

SharedPreferences etext = getPreferenceManager().getSharedPreferences(); 
SharedPreferences.Editor editor = etext.edit(); 
editor.putString("tel", tel); 
editor.apply(); 

中检索:

SharedPreferences etext = getPreferenceManager().getSharedPreferences(); 
String str = etext.getString("tel", ""); 
+0

不,不断地越来越错误 – DaxHR

+0

让我们在聊天中继续讨论 – Stanojkovic

+0

什么样的错误?在这里放置日志。 – Stanojkovic

-1
在第二个代码

您有:

 else 
      Toast.makeText(AppLayoutMain.this, "Data Loaded Sucessfully", Toast.LENGTH_LONG).show(); 
      bmiRezultat.setText(bmiSaved); 
      bmrRezultat.setText(bmrSaved);

我想这应该是这样的,你需要添加括号{}:

 else { 
      Toast.makeText(AppLayoutMain.this, "Data Loaded Sucessfully", Toast.LENGTH_LONG).show(); 
      bmiRezultat.setText(bmiSaved); 
      bmrRezultat.setText(bmrSaved); 
     }

也是为什么你添加“DEFAULT”作为它不会被初始化为“N/A”这样的默认字符串值只是

sharedPreferences.getString("bmr", DEFAULT);

更换*我以为你调用save在设计中使用某种按钮从XML中单击功能。

+0

只是做了所有这一切,我有一个按钮,它调用了保存onClick,但它不会保存数据。如果我杀了应用程序,数据被删除 – DaxHR

+0

商店和检索您使用的代码是正确的,只需再次检查可能导致此问题的任何其他代码。尝试冒烟测试,只需将文本设置为静态字符串,并在第二个活动中将其打印在吐司中。 –

+0

大括号在他们的地方。 – Stanojkovic

0

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) .edit().putString("key", StringValue).apply();保存一个字符串。

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) .getString("key", defaultString);获取字符串。
至少为默认首选项。