2017-10-06 104 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是外內,它給了我,我應該聲明它最終 – Valgaal

+1

然後聲明爲final ..沒有問題的錯誤。做它 –

+0

是的,它的工作原理。我認爲,這將是不是那麼明顯的答案。我避免決賽..但這只是一種方式 – Valgaal