2015-10-06 3 views
0

Я - новый пользователь для android. Я разрабатываю приложение, в котором я получаю некоторые данные с сервера в формате JSONArray. Я хочу показать время выхода и время входа в систему для активности, вызванной функцией HistoryActivity, а также широтой и долготой другой активности, т. Е. MapActivity в виде списка. У меня большой JSONArray. Проблема здесь в том, что я получаю такую ​​же дату в представлении списка. Длина массива верна, только данные повторяются. Как я могу это сделать? Я много пробовал. Вот мой код.Данные повторяющиеся в виде списка

@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 onPreExecute() { 
     super.onPreExecute(); 
     nDialog = new ProgressDialog(HistoryActivity.this); 
     nDialog.setMessage("Loading.."); 
     nDialog.setTitle("Please Wait"); 
     nDialog.setIndeterminate(false); 
     nDialog.setCancelable(false); 
     nDialog.show(); 
    } 

    @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); 
     myAdapter.notifyDataSetChanged(); 
    } 

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

     try { 

      HttpClient httpClient = new DefaultHttpClient(); 

      HttpPost httpRequest = new HttpPost(

        "http://techie-web.com/demo/app/japp/getpoint"); 

      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; 

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; 

} 
} 

Это мой JSON

[{"login_time":"10:30:28","logout_time":"10:31:47","login_date":"2015-09-30","lati_long":[{"date_time":"2015:09:30 11:15:15","Latitude":"21.121776","Longitude":"79.047563"},{"date_time":"2015:09:30 11:15:52","Latitude":"21.121776","Longitude":"79.047563"},{"date_time":"2015:09:30 11:17:16","Latitude":"21.121776","Longitude":"79.047563"}]},{"login_time":"10:42:56","logout_time":"10:44:41","login_date":"2015-09-30","lati_long":[{"date_time":"2015:09:30 11:14:53","Latitude":"21.121776","Longitude":"79.047563"},{"date_time":"2015:09:30 11:15:01","Latitude":"21.121776","Longitude":"79.047563"},{"date_time":"2015:09:30 11:15:15","Latitude":"21.121776","Longitude":"79.047563"}]},{"login_time":"10:45:29","logout_time":"10:45:36","login_date":"2015-09-30","lati_long":[{"date_time":"2015:09:30 11:14:53","Latitude":"21.121776","Longitude":"79.047563"},{"date_time":"2015:09:30 11:15:01","Latitude":"21.121776","Longitude":"79.047563"}]}] 

Что здесь не так? Пожалуйста, помогите мне.

+0

историю вызовов = новый ArrayList (); до history.add (pojo); – Sree

+0

@Sree Это показывает только один элемент в виде списка –

+0

@Sree Очистка истории просто удалит данные. Я думаю, что вы имели в виду, это начиналось с самого начала AsyncTask? которые ничего не меняют, поскольку они выполняются по порядку в onCreate. @Pri, удалите 'getItemId', я не думаю, что он делает то, что, по вашему мнению, он делает, вы никогда не перерабатываете представления, поскольку вы говорите, что каждый из них уникален. – RobVoisey

ответ

0

Всегда используйте ViewHolder при использовании ListView .Refer this article.Rewrite ваш код с помощью ViewHolder и проверьте.

+0

Я также пробовал использовать ViewHolder. Все еще не работает –

0

обновите GetView (INT позицию, вид convertView, ViewGroup родительский) метод, как этот

public View getView(int position, View convertView, ViewGroup parent) { 

if (convertView == null) { 
    LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    convertView = mInflater.inflate(R.layout.mytask_list_item, parent, false); 
    tv_date = (TextView) v.findViewById(R.id.historyDate); 
    convertView.setTag(R.id.historyDate, tv_date); 

} else { 
    tv_date = (TextView) convertView.getTag(R.id.histroyDate); 
} 
tv_date.setText("date"); 
} 

сделать то же самое для других TextViews

+0

Что такое mContext? –

+0

это переменная типа контекста в вашем случае. Контекстная активность; – Awadesh

+0

Это тоже не работает –

Смежные вопросы