项目第二次点击更新

时间:2016-06-26 05:40:46

标签: android android-alertdialog

我正在开展一个项目,我们在该项目中输入电子邮件,并使用数据库的不同表格中的电子邮件进行检查。根据输入电子邮件所在的表格,我想在单击按钮的对话框中显示复选框列表。我的问题是复选框的名称只在第二次点击时更新,并进一步点击名称的顺序更改。我无法弄清楚这一点并花了很多时间。请帮忙!

MainActivity.java

public class MainActivity extends AppCompatActivity {
public EditText et;
public Main2Activity act;
private String s;
private String[] st = {"","",""};
private int i,j;
private Boolean x;
private String url1 = "http://192.168.56.1:80/axis/results.json";
private String url2 = "http://192.168.56.1:80/hdfc/results.json";
private String url3 = "http://192.168.56.1:80/sbi/results.json";
private ProgressDialog pDialog;
private static String TAG = MainActivity.class.getSimpleName();
private String[] items= {"","",""};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //mail entered into the edittext
    et = (EditText)findViewById(R.id.editText);
    j=0;

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
// on click
public void makeJsonArrayRequest(View view) {
    j=0;
    s=et.getText().toString();//email to string
    JsonArrayRequest req1 = new JsonArrayRequest(url1,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    try {

                       for (int i = 0; i < response.length(); i++) {
                            JSONObject person = (JSONObject) response.get(i);
                            String email = person.getString("email");
                           if(email.equals(s)){
                               System.out.println("Axis");
                                //if present in the table add to list
                               addItem("AXIS");
                               }
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }


                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });
    JsonArrayRequest req2 = new JsonArrayRequest(url2,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    try {

                        for (int i = 0; i < response.length(); i++) {
                            JSONObject person = (JSONObject) response.get(i);
                            String email = person.getString("email");
                            if(email.equals(s)) {
                                System.out.println("HDFC");
                                addItem("HDFC");
                            }
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });
    JsonArrayRequest req3 = new JsonArrayRequest(url3,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    try {

                        for (int i = 0; i < response.length(); i++) {
                            JSONObject person = (JSONObject) response.get(i);
                            String email = person.getString("email");
                            if(email.equals(s)){
                                System.out.println("SBI");
                               addItem("SBI");}
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }


                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });

    AppController.getInstance().addToRequestQueue(req1);
    AppController.getInstance().addToRequestQueue(req2);
    AppController.getInstance().addToRequestQueue(req3);
    dialogadd();
}


public void addItem(String s)
{
    items[j]=s;
    j++;
}

public void dialogadd()
{
    Dialog dialog;


    final ArrayList itemsSelected = new ArrayList();
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Select banks you want to connect to: ");
    builder.setMultiChoiceItems(items, null,
            new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int selectedItemId,
                                    boolean isSelected) {
                    if (isSelected) {
                        itemsSelected.add(selectedItemId);
                    } else if (itemsSelected.contains(selectedItemId)) {
                        itemsSelected.remove(Integer.valueOf(selectedItemId));
                    }
                }
            })
            .setPositiveButton("Done!", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    //Your logic when OK button is clicked
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                }
            });
    dialog = builder.create();
    dialog.show();}

}

这是日志猫 logcat

首次点击

on first click

第二次点击

on second click

第三次点击

on third click

1 个答案:

答案 0 :(得分:1)

AppController.getInstance().addToRequestQueue(req1); // this will take some time get data
AppController.getInstance().addToRequestQueue(req2); // even this will take some time get data
AppController.getInstance().addToRequestQueue(req3); //last this also will take some time get data
dialogadd(); // but this is an instant call. which will show the dialog, since previous all three call are pending your data get shown unless they complete.

解决方案:使用以下调用来显示对话框

JsonArrayRequest req3 = new JsonArrayRequest(url3,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    try {

                        for (int i = 0; i < response.length(); i++) {
                            JSONObject person = (JSONObject) response.get(i);
                            String email = person.getString("email");
                            if(email.equals(s)){
                                System.out.println("SBI");
                               addItem("SBI");}
               // use this last call show dialog 
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }


                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });

建议

  

在排球中使用Future请求,我认为你需要的wt是一个接一个的同步调用