Android:将Array传递给StringBuffer到AlertDialog

时间:2017-08-24 16:23:33

标签: android onclick android-alertdialog stringbuffer

我想要完成的是获取一个数组,对其进行排序,拉出前5个结果并在一个小窗口中显示它们。建议我尝试使用前面提到的方法来完成此操作,如下面的代码所示。我还是Android新手,这是我第一次尝试使用StringBuffer和AlertDialog。

我的错误是我在初始化lastScoreMessage变量时做错了或者我错误地传递了它。我所知道的是,即使我在我的onClick开关案例中专门调用它,它也会给我一个错误,说它从未被使用过(在lastFive方法中)并且无法在onClick开关语句中解析符号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();
    }
}

2 个答案:

答案 0 :(得分:1)

只需在类中创建lastScoreMessage而不是方法。问题是变量的范围只是upto方法。首先在类中创建变量。然后像你一样在方法中存储值。

答案 1 :(得分:0)

您可以将C:\\filename声明为类变量,以及lastScoreMessage方法中的影响,或修改lastFive()方法以返回传递给lastFive()方法的字符串< / p>

showMessage()

并像这样设置String message = lastFive (); showMessage ("Last 5 Scores", message); 方法

lastFive()