Android 为什么listview显示最后一项两次?

Android 为什么listview显示最后一项两次?,android,listview,android-studio,android-volley,android-arrayadapter,Android,Listview,Android Studio,Android Volley,Android Arrayadapter,Mylistview将最后一项显示两次 我想用截图和MySQL展示数据库中的成员,从android向API发送请求,API是用PHP编程的,API返回 JSON数据 这是我的密码: String email, member_id, member_type; ListView community_member_list; Context context = this; MemberAdapter memberAdapter; List<Model> modelList = new A

My
listview
将最后一项显示两次

我想用截图和MySQL展示数据库中的成员,从android向API发送请求,API是用PHP编程的,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;
    }
}
字符串电子邮件、成员id、成员类型;
ListView社区成员列表;
上下文=这个;
成员适配器成员适配器;
List modelList=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_社区);
SharedReferences SP=GetSharedReferences(“MemberSession”,模式\私人);
Boolean member_logged_in=SP.getBoolean(“member_logged_in”,false);
email=SP.getString(“email”,null);
member\u id=SP.getString(“member\u id”,null);
member\u type=SP.getString(“member\u type”,null);
如果(!成员已登录)
{
Intent Intent=新的Intent(这个,Login.class);
星触觉(意向);
完成();
}否则{
社区成员列表=(ListView)findViewById(R.id.community成员列表);
memberAdapter=新的memberAdapter(getApplicationContext(),R.layout.community\u list\u项,modelList);
社区成员列表.setAdapter(memberAdapter);
获取社区成员();
}
}
公共无效获取社区成员()
{
StringRequest StringRequest=新建StringRequest(Request.Method.POST,new Login().site_url+“社区”,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject JSONObject=新JSONObject(响应);
JSONArray JSONArray=jsonObject.getJSONArray(“成员”);
模型=空;

for(int i=0;iRemove
memberAdapter.add(model);
in-onResponse-after-for循环。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();
                    }
试试看{
JSONObject JSONObject=新JSONObject(响应);
JSONArray JSONArray=jsonObject.getJSONArray(“成员”);
模型=空;

for(int i=0;iRemove
memberAdapter.add(model);
in-onResponse-after-for循环。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();
                    }
试试看{
JSONObject JSONObject=新JSONObject(响应);
JSONArray JSONArray=jsonObject.getJSONArray(“成员”);
模型=空;

对于(int i=0;i您添加了两次模型,一个在循环中,而不是在循环后添加了两次模型,一个在循环中,而不是在循环后添加了两次模型

您也可以附加服务器响应吗?您也可以附加服务器响应吗?谢谢,我将memberAdapter.add(model)替换为community_member_list.setAdapter(memberAdapter);它可以工作谢谢,我用community_member_list替换了memberAdapter.add(model)。setAdapter(memberAdapter);它可以工作