1

Mon listview affiche le dernier élément deux fois.Pourquoi listview montrant le dernier article deux fois?

Je veux montrer les membres de la base de données avec MySQL et reprise de volée, l'envoi de la demande de Android API qui est programmé en PHP et l'API de retour
de données JSON.

Voici mon code:

String email, member_id, member_type; 
ListView community_member_list; 
Context context = this; 

MemberAdapter memberAdapter; 
List<Model> modelList = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_community); 

    SharedPreferences SP = getSharedPreferences("MemberSession", MODE_PRIVATE); 
    Boolean member_logged_in = SP.getBoolean("member_logged_in", false); 
    email = SP.getString("email", null); 
    member_id = SP.getString("member_id", null); 
    member_type = SP.getString("member_type", null); 

    if (!member_logged_in) 
    { 
     Intent intent = new Intent(this, Login.class); 
     startActivity(intent); 
     finish(); 

    }else{ 

     community_member_list = (ListView) findViewById(R.id.community_members_list); 

     memberAdapter = new MemberAdapter(getApplicationContext(), R.layout.community_list_item, modelList); 
     community_member_list.setAdapter(memberAdapter); 

     get_community_members(); 
    } 

} 

public void get_community_members() 
{ 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, new Login().site_url+"community", 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 

         JSONObject jsonObject = new JSONObject(response); 
         JSONArray jsonArray = jsonObject.getJSONArray("members"); 
         Model model = null; 

         for(int i=0; i<jsonArray.length(); i++) { 

          JSONObject finalObject = jsonArray.getJSONObject(i); 

          model = new Model(); 

          model.setMember_id(finalObject.getInt("physician_id")); 
          model.setProfile_photo(finalObject.getString("profile_photo")); 
          model.setFirst_name(finalObject.getString("first_name")); 
          model.setLast_name(finalObject.getString("last_name")); 
          model.setDesignation(finalObject.getString("designation")); 
          model.setOrganization(finalObject.getString("organization")); 

          modelList.add(model); 
         } 

         memberAdapter.add(model); 
         memberAdapter.setNotifyOnChange(true); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

        Toast.makeText(context, "Error "+error, Toast.LENGTH_SHORT).show(); 
       } 
      }){ 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String,String> params = new HashMap<>(); 

      params.put("member_id", member_id); 

      return params; 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

private class MemberAdapter extends ArrayAdapter { 

    private List<Model> memberList; 
    private int resource; 
    private LayoutInflater inflater; 

    MemberAdapter(Context context, int resource, List<Model> objects) { 
     super(context, resource, objects); 
     memberList = objects; 
     this.resource = resource; 
     inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    } 

    @NonNull 
    @Override 
    public View getView(final int position, View convertView, @NonNull ViewGroup parent) { 

     if(convertView == null) 
     { 
      convertView = inflater.inflate(resource, null); 
     } 

     final ImageView imageView; 
     TextView textView, textView2; 

     imageView = (ImageView)convertView.findViewById(R.id.imageView); 
     textView = (TextView)convertView.findViewById(R.id.textView); 
     textView2 = (TextView) convertView.findViewById(R.id.textView2); 

     com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage("http://www.plexusd.com/uploads/specialist/" + memberList.get(position).getProfile_photo(), imageView, new ImageLoadingListener() { 
      @Override 
      public void onLoadingStarted(String imageUri, View view) { 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
       imageView.setImageResource(R.mipmap.avatar); 
      } 

      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
      } 

      @Override 
      public void onLoadingCancelled(String imageUri, View view) { 
       imageView.setImageResource(R.mipmap.avatar); 
      } 
     }); 

     textView.setText("Dr. "+memberList.get(position).getFirst_name()+" "+memberList.get(position).getLast_name()); 
     textView2.setText(""+memberList.get(position).getDesignation()+",\n"+memberList.get(position).getOrganization()); 

     return convertView; 
    } 
} 

Voici la photo de la liste de mobile.

here is the picture of list from mobile

+0

Pouvez-vous fixer la réponse du serveur ainsi? –

Répondre

0

Retirez memberAdapter.add(model); à l'intérieur onResponse après boucle. objet de modèle contient le dernier objet et vous ajoutez à nouveau dans l'adaptateur si dernier objet montrant 2 fois.

try { 

         JSONObject jsonObject = new JSONObject(response); 
         JSONArray jsonArray = jsonObject.getJSONArray("members"); 
         Model model = null; 

         for(int i=0; i<jsonArray.length(); i++) { 

          JSONObject finalObject = jsonArray.getJSONObject(i); 

          model = new Model(); 

          model.setMember_id(finalObject.getInt("physician_id")); 
          model.setProfile_photo(finalObject.getString("profile_photo")); 
          model.setFirst_name(finalObject.getString("first_name")); 
          model.setLast_name(finalObject.getString("last_name")); 
          model.setDesignation(finalObject.getString("designation")); 
          model.setOrganization(finalObject.getString("organization")); 

          modelList.add(model); 
         } 

         memberAdapter.add(model); // remove this. 
         memberAdapter.setNotifyOnChange(true); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
+0

Merci, j'ai remplacé memberAdapter.add (modèle) avec community_member_list.setAdapter (memberAdapter); Ça marche –

0

vous avez ajouté le modèle deux fois, l'une dans la boucle, et non de celui-ci après la boucle