我有一个检索用户请求数组的方法。我遍历这个数组,显示带有正负按钮的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()
。我怀疑听众会导致错误,但我不确定。怎么解决这个问题?
答案 0 :(得分:1)
您在收到上一个对话框的回复后发送请求:if(INDEX== ARRAY_LENGTH-1)
。
因为你在整个数组上运行一个循环(从0到ARRAY_LENGTH-1)并为每个数组显示一个对话框,所以对话框将按以下顺序显示:0,1,2,3,.... ARRAY_LENGTH-1,表示将显示的最后一个是ARRAY_LENGTH-1。这是您确认/拒绝的第一个对话框,当您执行此操作时,实际上是对setPositiveButton
或setNegativeButton
进行回调,(INDEX== ARRAY_LENGTH-1)
为true
。
要解决此问题,只需更改回调中的条件:if(INDEX == 0)
。