2017-10-06 9 views
1

Je veux faire un bouton lorsque je clique dessus une boîte de dialogue apparaît et je lis les données de cette boîte de dialogue. Dans la boîte de dialogue, j'ai seulement EditText pour les données. Mes données sont des nombres. Voici mon code:Impossible de recevoir des données à partir du bouton Listener

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 
       //} 
      } 
     }); 

Méthode (si vous en avez besoin)

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)); 
     } 

Le problème est que quand je lance le programme sans instruction if j'ai un java.lang.NumberFormatException d'erreur: Pour chaîne d'entrée: "". C'est parce qu'il lit une chaîne vide et que vous voulez l'analyser. Ensuite, j'ajoute if instruction pour éviter ce problème mais cela ne fonctionne pas. Et ma question est. Comment je peux réécrire cet écouteur pour éviter ces problèmes et stocker les données correctes?

Répondre

2

Mettez votre code à l'intérieur de l'auditeur positif

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

Je ne peux pas beacuse mon EditText savingsDialog est en dehors et il me donne l'erreur que je déclarer finale – Valgaal

+1

déclarer alors il finale .. pas de problème. fais-le –

+0

Ouais ça marche. Je pensais que ce ne sera pas une réponse si évidente. J'évite les finales .. Mais voici une seule façon – Valgaal