2017-01-18 21 views
0

私は、クラスの人BMIを計算するアプリケーションを作成しています。要件の1つは、共有された環境設定を使用して、計算されたBMIを2番目のアクティビティに送信することです。私の問題は、アプリケーションを実行するときにエラーが表示されない間は、何も正しく送信していないと思うということです。共有設定をAndroidに正しく保存するにはどうすればよいですか?

ここは起動時に実行される主なアクティビティです。

これは、最初のアクティビティから送信されたBMIを表示する、私の2番目のアクティビティです。私のアプリは、2番目の画面になると誰も私がいただければ幸い私のミスを見つけることができれば

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 


    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    int weight = sharedPref.getInt("key1", 0); 
    int height = sharedPref.getInt("key2", 0); 
    int bmi = sharedPref.getInt("key3", 0); 

    TextView txtBmi = (TextView) findViewById(R.id.txtBmi); 


    //error here 
    txtBmi.setText(Integer.toString(bmi)); 

は、TextViewの中で示した唯一のものは0です。

+0

あなたはあなたがそれらをタイプミスしないように、キー定数を作るために設定を保存する前に、第2の活動を開始... –

+1

まあ、その最高のされているが。また、「key1」、「key2」よりも名前を意味のあるものにするために、 –

答えて

5

保存する前にデータを読み込むことはできません。コードでは、最初にアクティビティを開始します次に SharedPreferencesにデータを保存します。これは、2番目のアクティビティが保存される前にデータをロードしようとしていることを意味します。

さらに重要なことに、これは問題の正しい解決策ではありません。 SharedPreferencesは、ユーザー名やゲームのスコアなど、アプリケーションの使用の間に持続する必要のあるデータを格納するためのものです。アクティビティ間でデータを渡すには、代わりにIntent.putExtra()メソッドを使用する必要があります。

0

コードの主な問題は、共有環境設定を保存する前にstartActivityを呼び出すことです。 だから、このようなあなたのコードに変更してみてください:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Button button = (Button)findViewById(R.id.btn1); 

final EditText Weight = (EditText)findViewById(R.id.txtWeight); 
final EditText Height = (EditText)findViewById(R.id.txtHeight); 

final SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 

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

    //the bmi calculation 
     // bmi = (weight * 703)/(height*height); 
     bmi = weight * height; 


     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putInt("key1", weight); 
     editor.putInt("key2", height); 
     editor.putInt("key3", bmi); 
     startActivity(new Intent(MainActivity.this, Main2Activity.class)); 

     } 
    } 
); 
} 
関連する問題