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