Android: 将数组传递给 StringBuffer 给 AlertDialog
Android: Pass Array to StringBuffer to AlertDialog
我想要完成的是获取一个数组,对其进行排序,提取前 5 个结果并将它们显示在一个小 window 中。建议我尝试使用前面提到的方法来完成此操作,如下面的代码所示。我对 Android 还是很陌生,这是我第一次尝试使用 StringBuffer 和 AlertDialog。
我的错误是我在初始化 lastScoreMessage 变量时做错了什么,或者我没有正确地传递它。我所知道的是,即使我在我的 onClick switch 案例中专门调用它,它也会给我一个错误,说它从未使用过(在 lastFive 方法中)并且无法在我尝试的 onClick switch 语句中解析符号 lastScoreMessage使用它。
非常感谢此处的任何帮助。
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();
}
}
只需在 class 而不是方法中创建 lastScoreMessage。问题是变量的范围仅限于方法。首先在 class 中创建变量。然后像您一样在方法中存储值。
您可以将 lastScoreMessage
声明为 class 变量并在 lastFive()
方法中影响它,或者将 lastFive() 方法修改为 return 字符串传递给 showMessage()
方法
String message = lastFive ();
showMessage ("Last 5 Scores", message);
并像这样设置 lastFive()
方法
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
}
我想要完成的是获取一个数组,对其进行排序,提取前 5 个结果并将它们显示在一个小 window 中。建议我尝试使用前面提到的方法来完成此操作,如下面的代码所示。我对 Android 还是很陌生,这是我第一次尝试使用 StringBuffer 和 AlertDialog。
我的错误是我在初始化 lastScoreMessage 变量时做错了什么,或者我没有正确地传递它。我所知道的是,即使我在我的 onClick switch 案例中专门调用它,它也会给我一个错误,说它从未使用过(在 lastFive 方法中)并且无法在我尝试的 onClick switch 语句中解析符号 lastScoreMessage使用它。
非常感谢此处的任何帮助。
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();
}
}
只需在 class 而不是方法中创建 lastScoreMessage。问题是变量的范围仅限于方法。首先在 class 中创建变量。然后像您一样在方法中存储值。
您可以将 lastScoreMessage
声明为 class 变量并在 lastFive()
方法中影响它,或者将 lastFive() 方法修改为 return 字符串传递给 showMessage()
方法
String message = lastFive ();
showMessage ("Last 5 Scores", message);
并像这样设置 lastFive()
方法
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
}