2017-12-15 7 views
1

私はアンドロイドアプリを開発していて、アプリが再オープンされたときにいつでもrand2値を使用できるようにsavedInstanceStateを使用してrand2(Doubleタイプ) NULLになりました。値が保存されていないか、値が取得されていません。なぜ起きているのですか?アプリケーションを再オープンしたときに再利用できるように、rand2値を保存するために何をすべきですか?JavaコードでsavedInstanceStateを使用して再利用可能な値を保存する

public class MainActivity extends AppCompatActivity { 


    double rand2; 
    private boolean started = false; 
    private Handler handler = new Handler(); 
    public Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 

      double rand1 = Math.random() * 5; 

      rand2 = rand2 + rand1 * 0.04; 

      DecimalFormat df = new DecimalFormat("0.00"); 

      String message1 = "" + df.format(rand1); 

      DecimalFormat dff = new DecimalFormat("000000.00"); 

      String message2 = "" + dff.format(rand2); 

      displayRate(message1); 

      displaySatoshi(message2); 


      if (started) { 
       start(started); 
      } 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     // recovering the instance state 
     // Restore UI state from the savedInstanceState. 
     // This bundle has also been passed to onCreate. 
     if (savedInstanceState != null) { 
      rand2 = savedInstanceState.getDouble("abc"); 
     } else { 
      rand2 = 0.00; 
     } 


     setContentView(R.layout.activity_main); 


     // Find the View that shows the numbers category 
     TextView numbers = (TextView) findViewById(withdraw); 
     // Set a click listener on that View 
     numbers.setOnClickListener(new View.OnClickListener() { 
      // The code in this method will be executed when the numbers View is clicked on. 
      @Override 
      public void onClick(View view) { 
       Intent numbersIntent = new Intent(MainActivity.this, Withdraw.class); 
       startActivity(numbersIntent); 
      } 
     }); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 

     savedInstanceState.putDouble("abc", rand2); 


     // call superclass to save any view hierarchy 
     super.onSaveInstanceState(savedInstanceState); 

    } 

    public void Start(View v) { 


     ToggleButton starStopTogglrButton = (ToggleButton) findViewById(R.id.start_stop); 
     boolean hasStartStop = starStopTogglrButton.isChecked(); 

     if (hasStartStop) { 

      start(hasStartStop); 

     } else { 
      stop(hasStartStop); 
     } 


    } 

    public void stop(Boolean hasStartStop) { 


     //Checking start or stop 
     started = hasStartStop; 
     handler.removeCallbacks(runnable); 
    } 

    public void start(Boolean hasStartStop) { 
     started = hasStartStop; 
     handler.postDelayed(runnable, 1000); 
    } 


    private void displayRate(String message1) { 
     TextView orderSummaryTextView = (TextView) findViewById(R.id.rate); 

     orderSummaryTextView.setText(message1); 
    } 

    private void displaySatoshi(String message2) { 
     TextView orderSummaryView = (TextView) findViewById(R.id.satoshis); 

     orderSummaryView.setText(message2); 


    } 


} 
+0

ここで、rand2をretievingしていますか?プリミティブダブルでは不可能です – elmorabea

答えて

0

onSaveInstanceStateアプリが閉じているときに呼び出されますが、それが終了しています後にアプリが起動されたときのonCreateにのみ呼ばれます。 acitvityのライフサイクルを忘れないでください:

enter link description here

onSaveInstanceStateは、クロージング時に呼び出され、活動が(再)作成されたときのonCreateだけ呼ばれるのでので、それはその時点で追加されていないので、それがnullです。

あなたはonRestoreInstanceStateを探しています。そのメソッドをオーバーライドして変数を取得し、そこから割り当てます。

savedInstanceState を使用すると、アクティビティが完全に破棄された場合、データは保存されません。永続的なデータストレージの場合は、sharedprefs、ファイルまたはSQLを使用してください。

関連する問題