2014-12-02 78 views
0

在我正在開發的Android應用程序中,我有一個用戶輸入使用SharedPreferences保存的數據的活動,並用於主活動的特定計算。我遇到的一個問題是,在保存數據之後,這些更改實際上不會在應用程序重新啓動之後才生效。有沒有一種方法可以使它與這些SharedPreferences相關的變量在重新啓動之前被更新?Android-在重新啓動應用程序之前保存更新的數據

這裏是我將數據保存在單獨的活動中。

 saveBn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      weightString = weightText.getText().toString(); 
      ageString = ageText.getText().toString(); 

      getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit() 
      .putString("savedWeight", weightString).commit(); 
      getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit() 
      .putString("savedAge", ageString).commit(); 

      //Intent i = new Intent("com.williammiller.capstonelapv2.MainActivity"); 
      //startActivity(i); 

       finish(); 
     } 
    }); 

這裏是我的主要活動正在檢查,看看他們是什麼

String age = getSharedPreferences("PREFERENCE", MODE_PRIVATE) 
      .getString("savedAge", "25"); 

    String weight = getSharedPreferences("PREFERENCE", MODE_PRIVATE) 
      .getString("savedWeight", "200"); 

    startBn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 



       Toast.makeText(getApplicationContext(), "weight = " + weightInt + " age = " + ageInt, Toast.LENGTH_LONG).show(); 





     } 
    }); 

回答

0

您可以使用一個BroadcastReceiver來實現這一目標。不要如下:

  1. 註冊一個BroadcastReceiver在您的主要活動:
public static final String UPDATE_ACTION = "yourpackage.update"; 
public static final String EXTRA_KEY_AGE = "key_age"; 
public static final String EXTRA_KEY_WEIGHT = "key_weight"; 
private BroadcastReceiver mReceiver;  

// In the onCreate() method 
mReceiver = new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       if(intent.getAction().equals(UPDATE_ACTION)){ 
        // Here you get the update data from another activity 
        String age = intent.getStringExtra(EXTRA_KEY_AGE); 
        String weight = intent.getStringExtra(EXTRA_KEY_WEIGHT); 
       } 
      } 
}; 
registerReceiver(receiver, new IntentFilter(UPDATE_ACTION)); 

// Add the following code to onDestroy() method 
unregisterReceiver(mReceiver); 
  • 發送廣播在 「單獨活動」 :

    public void onClick(View v) { 
        weightString = weightText.getText().toString(); 
        ageString = ageText.getText().toString(); 
        Intent intent = new Intent(MainActivity.UPDATE_ACTION); 
        intent.putExtra(MainActivity.EXTRA_KEY_AGE, ageString); 
        intent.putExtra(MainActivity.EXTRA_KEY_WEIGHT, weightString); 
        sendBroadcast(intent);  
        } 
    
  • 更新:更改部分代碼以在活動被銷燬時取消註冊BroadcastReceiver。

    +0

    所以,我仍然需要以相同的方式保存數據,但使用它會自動更新這些值。我的想法是否正確? – user3082473 2014-12-02 19:32:39

    +0

    這是根據你。保存數據可以使其存在,即使應用程序關閉並再次打開。如果您只想在主要活動中更新它們,則不需要保存它們。 – 2014-12-03 02:25:55

    相關問題