适配器无法显示正确的数据

时间:2015-10-03 05:04:58

标签: android json baseadapter getter-setter

我正在开发一个应用程序,我从服务器获取一个大的json数据。我想在列表视图中显示它。但我重复了相同的价值。列表视图显示的项目的数量是正确的。只在所有列表项中重复相同的数据。

这是我的代码。

 public class HistoryActivity extends AppCompatActivity {
private Toolbar toolbar;
String strServerResponse = null;
ProgressDialog nDialog;
ArrayList<String>clicklat;
ArrayList<String>clicklong;
ArrayList<String>dttime;
ArrayList<Pojo> history;
HistoryAdapter myAdapter;
ListView list;
public String date, inTime, outTime, inLat, inLong;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_history);
    toolbar = (Toolbar) findViewById(R.id.app_bar);
    toolbar.setTitle("History");
    clicklat=new ArrayList<String>();
    clicklong=new ArrayList<String>();
    dttime=new ArrayList<String>();
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    list = (ListView) findViewById(R.id.historyList);
    history = new ArrayList<Pojo>();
    new NetCheck().execute();
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    ArrayList<String>clicklat= new ArrayList<String>(history.get(position).getLati());

    ArrayList<String>clicklong= new ArrayList<String>(history.get(position).getLongi());

    ArrayList<String>dttime= new ArrayList<String>(history.get(position).getDatetime());

    Intent i = new Intent(HistoryActivity.this, DetailsActivity.class);
    i.putStringArrayListExtra("clicklat", clicklat);
    i.putStringArrayListExtra("clicklong", clicklong);
    i.putStringArrayListExtra("clickdatetime", dttime);
    startActivity(i);
        }
    });

}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}


private class NetCheck extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        nDialog.dismiss();
        // TODO Auto-generated method stub

        myAdapter = new HistoryAdapter(HistoryActivity.this, history);
        list.setAdapter(myAdapter);
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        try {

            HttpClient httpClient = new DefaultHttpClient();

            HttpPost httpRequest = new HttpPost(

                    "http://myurl");

            httpRequest.setHeader("Content-Type", "application/json");
            SharedPreferences mmm = getSharedPreferences(
                    "MyPref", MODE_PRIVATE);

            String logempid = mmm.getString("id", null);

            JSONObject json = new JSONObject();

            json.put("empid", logempid);

            Log.e("JSON Object", json.toString());

            StringEntity se = new StringEntity(json.toString());

            se.setContentEncoding("UTF-8");
            se.setContentType("application/json");

            httpRequest.setEntity(se);
            HttpResponse httpRes = httpClient.execute(httpRequest);

            java.io.InputStream inputStream = httpRes.getEntity()
                    .getContent();
            InputStreamReader inputStreamReader = new InputStreamReader(
                    inputStream);

            BufferedReader reader = new BufferedReader(inputStreamReader);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            inputStream.close();
            strServerResponse = sb.toString();
            Log.e("Server Response", "" + strServerResponse.toString());

            if (strServerResponse != null) {
                try {

                    JSONArray arr = new JSONArray(strServerResponse);

                    for (int k = 0; k < arr.length(); k++) {

                        JSONObject jsonObj1 = arr.getJSONObject(k);
                        Pojo pojo = new Pojo();
                        JSONArray subArrayLat = jsonObj1.getJSONArray("lati_long");

                        List<String> lati= new ArrayList<String>();
                        List<String> longi= new ArrayList<String>();
                        List<String> dateandtime= new ArrayList<String>();

                        for (int i = 0; i < subArrayLat.length(); i++) {
                            String lat = subArrayLat.getJSONObject(i).getString("Latitude").toString();
                            String loong = subArrayLat.getJSONObject(i).getString("Longitude").toString();
                            String datetimee = subArrayLat.getJSONObject(i).getString("date_time").toString();

                            lati.add(lat);
                            longi.add(loong);
                            dateandtime.add(datetimee);
                        }



                        pojo.setLati(lati);//adding latitude list
                        pojo.setLongi(longi); //adding longitude list
                        pojo.setDatetime(dateandtime);

                        String dateee = arr.getJSONObject(k).getString("login_date");
                        String timeeee = arr.getJSONObject(k).getString("login_time");
                        String timeeee2 = arr.getJSONObject(k).getString("logout_time");

                        pojo.setDate(dateee);
                        pojo.setLoginTime(timeeee);
                        pojo.setLogoutTime(timeeee2);

                        history.add(pojo);
                    }

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

这是适配器

   public class HistoryAdapter extends BaseAdapter {
private Context activity;
TextView tv_date;
TextView tv_loginTime;
TextView tv_logoutTime;
ArrayList<Pojo> list;
private ArrayList<Pojo> arraylist = null;
public static LayoutInflater inflater;
private Context context;


public HistoryAdapter(Context a, ArrayList<Pojo> history) {
    // TODO Auto-generated constructor stub
    activity = a;
    list = history;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.arraylist = new ArrayList<Pojo>();
    this.arraylist.addAll(list);

}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View v = convertView;
    if(convertView == null) {
        v = inflater.inflate(R.layout.history_item, parent, false);
    }
    final Pojo pojo = list.get(position);
    tv_date = (TextView) v.findViewById(R.id.historyDate);
    tv_loginTime = (TextView) v.findViewById(R.id.historyLoginTime);
    tv_logoutTime = (TextView) v.findViewById(R.id.historyLogoutTime);
    tv_date.setText(pojo.getDate());
    tv_loginTime.setText(pojo.getLoginTime());
    tv_logoutTime.setText(pojo.getLogoutTime());
    return v;

}

}

and setters and getters

   public class Pojo {
public static String empid11;
public static String loginTime;
public static String date;
public static String logoutTime;
public static List<String> lat;
public static List<String> datetime;
public static List<String> longi;
public static List<String> inlogin;
public static List<String> inDate;
public List<String> getInTime(){
    return this.inlogin;
}

public List<String> getInDate(){
    return this.inDate;
}
public void setInDate(List<String> inDate){
    this.inDate = inDate;
}
public List<String> getLati(){
    return this.lat;
}

public List<String> getLongi(){
    return this.longi;
}

public void setLati(List<String> lat){
    this.lat = lat;
}

public void setLongi(List<String> longi){
    this.longi = longi;

}
public void setId(String empid) {
    this.empid11 = empid;
}

public String getId() {
    return empid11;
}

public void setLoginTime(String loginTime) {
    this.loginTime = loginTime;

}

public String getLoginTime() {
    return loginTime;
}

public void setLogoutTime(String logoutTime) {
    this.logoutTime = logoutTime;
}

public String getLogoutTime() {
    return logoutTime;
}

public void setDate(String date) {
    this.date = date;
}

public String getDate() {
    return date;
}


public List<String> getDatetime(){
    return this.datetime;
}

public void setDatetime(List<String> datetime){
    this.datetime = datetime;
}
}

2 个答案:

答案 0 :(得分:0)

您好,请参阅适配器的修改版本。如果您有任何问题,请告诉我。

public class HistoryAdapter extends BaseAdapter 
{
private Context activity;
TextView tv_date;
TextView tv_loginTime;
TextView tv_logoutTime;
private ArrayList<Pojo> arraylist = null;
public static LayoutInflater inflater;
private Context context;


public HistoryAdapter(Context a) {
    activity = a;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.arraylist = new ArrayList<Pojo>();
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

public void addHistoryData(ArrayList<Pojo> newDataset){
    if(arraylist != null){
        arraylist.addAll(newDataset);
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mViewHolder = null;
    if(convertView == null) 
    {
        mViewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.history_item, parent, false);
        mViewHolder.tv_date = (TextView) convertView.findViewById(R.id.historyDate);
        mViewHolder.tv_loginTime = (TextView)convertView.findViewById(R.id.historyLoginTime);
        mViewHolder.tv_logoutTime = (TextView)convertView.findViewById(R.id.historyLogoutTime);
        convertView.setTag(mViewHolder);
    }else{
        mViewHolder = (ViewHolder) convertView.getTag();
    }

    final Pojo pojo = list.get(position);
    mViewHolder.tv_date.setText(pojo.getDate());
    mViewHolder.tv_loginTime.setText(pojo.getLoginTime());
    mViewHolder.tv_logoutTime.setText(pojo.getLogoutTime());
    return v;
}

public class ViewHolder{
    TextView tv_date
    TextView tv_loginTime;
    TextView tv_logoutTime;
}

}

在下一个活动NetCheck类中,当Web服务响应发生变化时,如下所示:

history.add(pojo);
myAdapter.addHistoryData(history);
myAdapter.notifiyDatasetChanged();

答案 1 :(得分:0)

您可能会遇到数组中重复值的问题,请先检查您的阵列。