2014-12-02 60 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

    相关问题