2016-06-26 6 views
0

나는 이메일을 입력하는 프로젝트에서 작업하고 있는데, 이는 데이터베이스의 다른 테이블에있는 이메일을 통해 확인됩니다. 입력 된 전자 메일이있는 테이블에 따라 단추를 클릭 할 때 대화 상자에 확인란 목록을 표시하려고합니다. 내 문제는 두 번째 클릭시에만 확인란의 이름이 업데이트되고 클릭하면 이름 순서가 변경된다는 것입니다. 나는 이것을 이해할 수 없으며 같은 시간에 많은 시간을 보냈다. 도와주세요! 여기 MainActivity.javaItems 두 번째 클릭시 업데이트

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();} 

} 

는 두 번째 클릭 0,123,615,049,836을에 첫 번째 클릭 on first click

의 로그 고양이 logcat

입니다 세 번째 클릭에

on third click

+1

3 개의 네트워크 통화가 모두 완료된 후 다이얼 대화 방식이 완료되었습니다. – USKMobility

+0

예 ... @USKMobility, +1 및 많은 감사합니다! –

답변

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(); 

     } 
    }); 

조언을 보여 당신이 필요로하는 동기식 호출은 다음과 같습니다. 다른

+0

굉장한 설명 +1, 나는 노력했고 잘 동작했다! 고맙습니다! –

관련 문제