2017-10-06 10 views
1

ボタンをクリックするとダイアログが表示され、そのダイアログからデータを読み込みます。ダイアログには私はデータ用のEditTextしかありません。私のデータは数字です。ボタンからデータを受け取ることができませんリスナー

Button mSaveButton = (Button) findViewById(R.id.saveButton); 
     mSaveButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       AlertDialog.Builder mBuilder = new AlertDialog.Builder(ReportActivity.this); 
       View mView = getLayoutInflater().inflate(R.layout.dialog_for_percent , null); 
       EditText savingsDialog = (EditText) mView.findViewById(R.id.percentEditText); 
       mBuilder.setView(mView) 
         .setPositiveButton(R.string.done, new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 

           Context context = getApplicationContext(); 
           Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show(); 
          } 
         }) 
         .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.dismiss(); 
          } 
         }); 
       AlertDialog dialog = mBuilder.create(); 
       dialog.show(); 
       //if (savingsDialog.getText().toString().length() > 0) { I tried this if, but I receive empty data 
        SharedPreferences savings = getSharedPreferences(PREFS_NAME, 0); 
        SharedPreferences.Editor editor = savings.edit(); 
        editor.putString("percent", savingsDialog.getText().toString()); 
        editor.commit(); 

        updateSavingsView(Integer.parseInt(savingsDialog.getText().toString()));// here I want to put my data in method which update my TextView 
       //} 
      } 
     }); 

方法(あなたがそれを必要とする場合)

public void updateSavingsView(int savings){ 

     TextView savingsTextView = (TextView) findViewById(R.id.saverTextView); 
     savingsTextView.setText("Save " + savings + "% per month"); 

     TextView monthlySavings = (TextView) findViewById(R.id.savingsMoney); 
     if(savings == 0 || Integer.parseInt(income.getText().toString()) == 0) { 
      monthlySavings.setText("0"); 
     } 
     else{ 

      monthlySavings.setText(Integer.toString((Integer.parseInt(income.getText().toString()) * savings)/100)); 
     } 

だから、問題は、私はif文なしでプログラムを実行すると、私はエラーjava.lang.NumberFormatExceptionを持っていることです:: はここに私のコードであるために入力文字列: ""それは空の文字列を読み込み、それを解析したいからです。次に、if文を追加してこの問題を回避しますが、動作しません。 私の質問は。これらの問題を回避し、正しいデータを保存するために、このリスナーをどのように書き直すことができますか?

答えて

2

は正のリスナー

Button mSaveButton = (Button) findViewById(R.id.saveButton); 
     mSaveButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       AlertDialog.Builder mBuilder = new AlertDialog.Builder(ReportActivity.this); 
       View mView = getLayoutInflater().inflate(R.layout.dialog_for_percent , null); 
       final EditText savingsDialog = (EditText) mView.findViewById(R.id.percentEditText); 
       mBuilder.setView(mView) 
         .setPositiveButton(R.string.done, new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 

           Context context = getApplicationContext(); 
           Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show(); 

        SharedPreferences savings = getSharedPreferences(PREFS_NAME, 0); 
        SharedPreferences.Editor editor = savings.edit(); 
        editor.putString("percent", savingsDialog.getText().toString()); 
        editor.commit(); 

        updateSavingsView(Integer.parseInt(savingsDialog.getText().toString())); 
          } 
         }) 
         .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.dismiss(); 
          } 
         }); 
       AlertDialog dialog = mBuilder.create(); 
       dialog.show(); 
      } 
      } 
     }); 
+0

私は私のEditText savingsDialogが外にあるbeacuseことができないの内側にあなたのコードを入れて、それは私に私はそれが最終的 – Valgaal

+1

はそれ最終的に...何の問題を宣言しない宣言しなければならないエラーが発生します。それは –

+0

うん、それは動作します。私はiwがあまりにも明白な答えではないと思った。私は決勝を避けます..しかし、ここには1つしかありません – Valgaal

関連する問題