1

我的listview顯示最後一個項目兩次。爲什麼listview顯示最後一個項目兩次?

我想說明從數據庫中成員凌空和MySQL,從發送到Android的這是在PHP編程 API請求和API回報
JSON數據。

這裏是我的代碼:

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

下面是從移動清單的圖片。

here is the picture of list from mobile

+0

您可以將服務器的響應,以及之後? –

回答

0

for循環後內部onResponse刪除memberAdapter.add(model);。模型對象保存最後一個對象,並且您將再次添加到適配器中,以便最後一個對象顯示2次。

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

謝謝,我用community_member_list.setAdapter(memberAdapter)替換了memberAdapter.add(model);有用 –

0

您添加模式的兩倍,它在一個循環,而不是它的循環