2017-04-14 10 views
0

他のすべての回答を行った後でも自分のコードが間違っているかどうかを確認できません。誰かが私のコードを見て、リストビューのみがループの最後の項目を表示する理由を教えてくださいすることができ ここではこれは私が、コンソールでのArrayListを印刷するとき、私が得るものですリストビューでarrayListを設定しようとしていますが、最後の項目だけがリストビューに表示されます

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my_appointments); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    pDialog = new ProgressDialog(this); 
    pDialog.setCancelable(false); 
    db = new SQLiteHandler(getApplicationContext()); 
    listview = (ListView)findViewById(R.id.appointmentList); 
    // cancel request tag 
    String tag_string_req = "req_appointments"; 

    pDialog.setMessage("fetching appointments..."); 
    showDialog(); 

    StringRequest strReq = new StringRequest(Request.Method.POST, 
      AppConfig.URL_FETCH_APPOINTMENTS, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d(TAG, "Appointment fetch response: " + response.toString()); 
      hideDialog(); 

      try { 
       JSONObject jObj = new JSONObject(response); 
       boolean error = jObj.getBoolean("error"); 
       if (!error) { 
        JSONArray appointments = jObj.getJSONArray("appointments"); 
        //Log.d(TAG, String.valueOf(appointments.length())); 
        int count=appointments.length(); 
        String fullAppointment=""; 
        for (int i=0;i<count;i++){ 
         JSONObject jsonObj2 = appointments.getJSONObject(i); 
         String date = jsonObj2.getString("date"); 
         String status=jsonObj2.getString("status"); 
         String timestamp=jsonObj2.getString("timestamp"); 
         String appointmentStatus=""; 
         if (status.matches("PENDING")){ 
          appointmentStatus="This appointment is still pending and has not been confirmed by the doctor"; 
         }else{ 
          appointmentStatus="This appointment has already been confirmed by the doctor"; 
         } 
         //Log.d(TAG,date+":"+status+":"+timestamp); 
         fullAppointment="Date of consultation: "+date +"\n"+ appointmentStatus +"\n"+ "Booked on date :"+timestamp; 
         //myList.add(fullAppointment); 
         adapter.add(fullAppointment); 
         adapter.notifyDataSetChanged(); 

        } 


       } else { 

        String errorMsg = jObj.getString("error_msg"); 
        Toast.makeText(getApplicationContext(), 
          errorMsg, Toast.LENGTH_LONG).show(); 
        Intent intent = new Intent(
          MyAppointments.this, 
          HomeActivity.class); 
        startActivity(intent); 
        finish(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e(TAG, "Appointment Error: " + error.getMessage()); 
      Toast.makeText(getApplicationContext(), 
        error.getMessage(), Toast.LENGTH_LONG).show(); 
      hideDialog(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      HashMap<String, String> user = db.getUserDetails(); 
      String userID = user.get("uid"); 
      // Posting params to register url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("userID", userID); 

      return params; 
     } 

    }; 

    // Adding request to request queue 
    myConnection.getInstance().addToRequestQueue(strReq, tag_string_req); 

    adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,0); 
    listview.setAdapter(adapter); 

} 

私のコードです enter image description here

+0

あなたのarraylistはどこですか? –

+0

あなたのコードでmyListリストを作成する場所は? –

+0

私はクラスの冒頭でそれを初期化してから、ループ内の要素を追加します。 –

答えて

1

すべてのリスト要素をコンソールに表示してください!すべての要素が同じであれば、リストに追加するStringオブジェクトを処理する必要があります。リスト内のすべての要素が1つのオブジェクトを指している可能性があります。文字列のフル・アポイントメント; forループの内側にあります。エラーが続く場合は、アダプタクラスを投稿してください!

+0

コンソールのすべての要素は、タイムスタンプの前にユニークですが、リストビューでは最後の要素が得られます –

+0

forループの中でフル・アポイントメントの宣言を移しましたか? –

関連する問題