2017-08-24 3 views
0

Was ich versuche zu erreichen, ist ein Array zu nehmen, es zu sortieren, die ersten 5 Ergebnisse zu ziehen und sie in einem kleinen Fenster anzuzeigen. Es wurde mir empfohlen, dies zu versuchen, indem ich die oben erwähnten Methoden nutze, wie im folgenden Code gezeigt. Ich bin immer noch ziemlich neu in Android und dies ist mein erster Versuch, StringBuffer und AlertDialog zu verwenden.Android: Array an StringBuffer an AlertDialog übergeben

Mein Fehler ist, dass ich entweder etwas falsch gemacht Initialisierung der LastScoreMessage-Variable oder ich bin es falsch übergeben. Alles, was ich weiß, ist, dass, obwohl ich es speziell in meinem onClick-Switch-Fall anrufe, es einen Fehler gibt, der besagt, dass es niemals benutzt wird (in der lastFive-Methode) und das lastScoreMessage-Symbol in der onClick-Switch-Anweisung nicht auflösen kann benutze es.

Jede Hilfe hier wird sehr geschätzt.

public class EditTextButtons extends AppCompatActivity implements View.OnClickListener { 

    DBHandler db; 

    Calendar c = Calendar.getInstance (); 
    Date d = c.getTime (); 

    EditText etName; 
    Button btnAdd; 
    Button btnLastFive; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate (savedInstanceState); 
     setContentView (R.layout.snake_layout_r); 

     db = new DBHandler (this); 

     etName = (EditText) findViewById (R.id.etName); 
     btnAdd = (Button) findViewById (R.id.btnAdd); 
     btnLastFive = (Button) findViewById (R.id.btnLastFive); 

     // set listeners 
     btnAdd.setOnClickListener (this); 
     btnLastFive.setOnClickListener (this); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId ()) { 
      case R.id.btnAdd: 
       insertIntoDB (); 
       Intent i = new Intent (getApplicationContext (), Snake.class); 
       startActivity (i); 
       break; 
      case R.id.btnLastFive: 
       lastFive(); 
       showMessage ("Last 5 Scores", lastScoreMessage); 
       break; 
      default: 
       break; 
     } 
    } 


    protected void insertIntoDB() { 
     ContentValues cv = new ContentValues (); 
     cv.put (db.USERNAME, etName.getText ().toString ()); 
    } 

    protected void lastFive() { 
     int listsize = 5; 
     List<User> userlist = new ArrayList<User> (); 
     userlist = db.convertDatabaseToList (); 
     Collections.sort (userlist, User.Comparators._id); 

     StringBuffer buffer = new StringBuffer(); 
     String lastScoreMessage; 

     for (int i = 0; i < listsize; i++) { 
      User temp = userlist.get(i); 

      String username = temp.getName(); 
      int score = temp.getScore(); 

      buffer.append(username + ": " + score + "\n"); 
     } 

     lastScoreMessage = buffer.toString(); 
    } 


    protected void showMessage(String title, String message) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setCancelable(true); 
     builder.setTitle(title); 
     builder.setMessage(message); 
     builder.show(); 
    } 
} 
+1

Sieht aus wie 'LastScoreMessage' ist keine Variable, auf die die Methode' onClick' zugreifen kann. Sie müssen es als Klassenvariable deklarieren, es wird nur in der Methode 'lastFive' ​​zugegriffen und danach nichts mehr. @Pavneet_Singh hat mich dazu geschlagen. :-) – escapesequence

Antwort

1

einfach lastScoreMessage in der Klasse statt Methode erstellen. Das Problem ist der Umfang der Variablen ist nur upto-Methode. Erstellen Sie zuerst eine Variable in der Klasse. und dann den Wert in der Methode speichern, wie Sie es getan haben.

+0

Ich fühle mich jetzt albern, es war so offensichtlich! Ich danke dir sehr! –

0

können Sie erklären lastScoreMessage als Klassenvariable die eine in den lastFive() Verfahren beeinflussen oder die lastFive() -Methode ändern die Zeichenfolge zurück, die Sie die showMessage() Methode übergeben

String message = lastFive(); 
showMessage ("Last 5 Scores", message); 

und stellen Sie die lastFive() Methode wie dieses

protected String lastFive() { 
    int listsize = 5; 
    List<User> userlist = new ArrayList<User> (); 
    userlist = db.convertDatabaseToList (); 
    Collections.sort (userlist, User.Comparators._id); 

    StringBuffer buffer = new StringBuffer(); 
    String lastScoreMessage; 

    for (int i = 0; i < listsize; i++) { 
     User temp = userlist.get(i); 

     String username = temp.getName(); 
     int score = temp.getScore(); 

     buffer.append(username + ": " + score + "\n"); 
    } 

    lastScoreMessage = buffer.toString(); 

    return lastScoreMessage 
}