2016-12-12 2 views
0

J'essaie d'enregistrer userName mais le fichier texte enregistré retourne toujours , 6. Comment puis-je l'obtenir pour montrer quelle que soit la valeur de userName entré dans EditText, et le reste? par exemple Don, 6. J'ai lu que vous devez utiliser getText() mais cela ne retourne rien dans le fichier enregistré.getText(). ToString() ne fonctionne pas, retourne vide

Cependant, si je remplace 6 avec l'intention de recevoir le score de l'activité précédente, cela fonctionne! comme ça ...

 Bundle extras = getIntent().getExtras(); 
     int score = extras.getInt("Score"); 

donc cela va devenir ...

public void addListenerToEndButton() { 

    quit = (Button) findViewById(R.id.endBtn); 
    userName = (EditText) findViewById(R.id.userName); 

    Bundle extras = getIntent().getExtras(); 
    int score = extras.getInt("score"); 

    quit.setOnClickListener(new View.OnClickListener() { 

     String strName = userName.getText().toString(); 

     @Override 
     public void onClick(View v) { 
      saveProgress(strName + ", " + score, "results.txt"); 
      finish(); 
      System.exit(0); 
     } 
    }); 
} 

Mais il revient encore empty, whatever score is. Par exemple , 4.

J'ai lu ce post qui suggère qu'il devrait être à l'intérieur onClickListener qu'il est: EditText getText().toString() not working

Ceci est ma saveProgress classe:

public void saveProgress(String contents, String fileName) { 

    try { 
     File fp = new File(this.getFilesDir(), fileName); 
     FileWriter out = new FileWriter(fp); 
     out.append(contents); 
     out.append("\n\r"); 
     out.close(); 
    } 

    catch (IOException e) { 
     Log.d("Me","file error:" + e); 
    } 
} 
+0

n'est pas le problème que vous récupérez le texte de l'edittext en dehors de la méthode onclick? essayez de le déplacer à l'intérieur de l'onClick –

Répondre

1

Changer votre méthode onClick() avec les éléments suivants:

public void addListenerToEndButton() { 
    quit = (Button) findViewById(R.id.endBtn); 
    userName = (EditText) findViewById(R.id.userName); 

    Bundle extras = getIntent().getExtras(); 
    int score = extras.getInt("score"); 

    quit.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     String strName = userName.getText().toString(); 
     saveProgress(strName + ", " + score, "results.txt"); 
     finish(); 
     System.exit(0); 
    } 
    }); 
} 

Les appels, les initialisations, les opérations, exc, devraient aller à l'intérieur du onClick méthode de l'auditeur. Le onClick est tiré que lorsque le bouton est cliqué, tout en dehors du onClick mais à l'intérieur du Listener est appelé Listener initialisation

+0

Merci, un tel simple point de vue. Je le comprends maintenant. Je sais que cela dépasse la portée de la question, mais avez-vous des idées pour remplacer le fichier au lieu de l'ajouter dans ce fichier texte en tant que nouvelle ligne? Je l'ai essayé dans la classe 'saveProgress'. – kamil1995b

+0

@ kamil1995b honnêtement je ne sais pas, mais envisager de regarder [ce lien] (http://stackoverflow.com/questions/4542318/android-append-text-file) :) –

0

Je suppose que vous avez compris « intérieur onClickListener » mal. Qu'est-ce que vous faites atm est que vous lisez strName lorsque vous créez l'écouteur, mais je suppose que vous voulez le lire quand quit est cliqué.

Donc il suffit de déplacer la ligne dans la fonction et la valeur sera correcte.

public void addListenerToEndButton() { 

    quit = (Button) findViewById(R.id.endBtn); 
    userName = (EditText) findViewById(R.id.userName); 

    quit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String strName = userName.getText().toString(); 
      saveProgress(strName + ", " + 6, "results.txt"); 
      finish(); 
      System.exit(0); 
     } 
    }); 
}