Android:如何在n个对话框输入后发送httppost请求

时间:2014-02-21 20:30:03

标签: android http post android-alertdialog

我有一个检索用户请求数组的方法。我遍历这个数组,显示带有正负按钮的Dialog。当确认最后一个Dialog是否为是时,会向服务器发送httppost以处理数据。我建立了这样的功能:

private void processRequests(String resJSON){
    try {
        JSONArray array = new JSONArray(resJSON);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Neue Herausvorderung");
        builder.setCancelable(false);
        final int ARRAY_LENGTH = array.length();

        for(int i=0; i<array.length(); i++){
            JSONObject obj = array.getJSONObject(i);
            final String NAME= obj.getString("userName");
            final long ID= obj.getLong("userID");
            final int INDEX= i;

            builder.setMessage(name + " fordert dich zu einem Duell heraus! Willst du annehmen?");

            builder.setPositiveButton("JA", new DialogInterface.OnClickListener() { 
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    acceptedUsers.add(new User(ID, NAME));

                    if(INDEX== ARRAY_LENGTH-1){
                        sendRequestStuff();
                    }
                }
            });

            builder.setNegativeButton("NEIN", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    declinedUsers.add(new User(ID, NAME));
                    if(INDEX== ARRAY_LENGTH-1){
                        sendRequestStuff();
                    }
                }
            });

            AlertDialog alert = builder.create();
            alert.show();
        }



    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

问题是,只要确认第一个Dialog,就会调用sendRequestStuff()。我怀疑听众会导致错误,但我不确定。怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

您在收到上一个对话框的回复后发送请求:if(INDEX== ARRAY_LENGTH-1)

因为你在整个数组上运行一个循环(从0到ARRAY_LENGTH-1)并为每个数组显示一个对话框,所以对话框将按以下顺序显示:0,1,2,3,.... ARRAY_LENGTH-1,表示将显示的最后一个是ARRAY_LENGTH-1。这是您确认/拒绝的第一个对话框,当您执行此操作时,实际上是对setPositiveButtonsetNegativeButton进行回调,(INDEX== ARRAY_LENGTH-1)true

要解决此问题,只需更改回调中的条件:if(INDEX == 0)