2017-10-06 7 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

내 글고 savingsDialog이 밖에 beacuse 수없는 내부 코드를 넣고 그것은 나에게 내가 최종 – Valgaal

+1

는 다음 최종 .. 아무 문제가 선언되지 선언해야 오류가 있습니다. 그것을 할 –

+0

그래, 작동합니다. 나는 iw가 그렇게 분명한 대답이되지 않을 것이라고 생각했다. 나는 결승전을 피한다. 그러나 여기에는 오직 한 가지 길 밖에 없다. – Valgaal