2016-12-05 4 views
1

У меня есть этот результат JSON ниже от Android запросаВыбор каждой записи из JSON результата, а затем добавить его в ListView, Android

[{"j_id":"1","j_title":"Online Content Management"},{"j_id":"2","j_title":"Graduate developer"}]

Я пытаюсь показать как значения j_id и j_title столбцов на каждом Listview, но я понял, что Listview показывает только последнюю запись в каждом списке.

Это скриншот моего выхода

enter image description here

Это моя активность Код

txt1 = (TextView) findViewById(R.id.textView1); 
txt2 = (TextView) findViewById(R.id.textView2); 
listView = (ListView) findViewById(R.id.list); 


list = new ArrayList<HashMap<String, String>>(); 

    String[] from={"j_id","j_title"};//string array 
    int[] to={R.id.textView3,R.id.textView4}; //int array of views id's 

dataAdapter = new SimpleAdapter(this,list,R.layout.list_view_items,from,to);//Create object and set the parameters for simpleAdapter 

// Assign adapter to ListView 
listView.setAdapter(dataAdapter); 

Мой doInBackground код в классе AsyncTask

@SuppressLint("NewApi") 
protected String doInBackground(String... params) { 

    HashMap<String, String> data = new HashMap<String, String>(); 

    // parse json data 
     data.put("jobsbycategory", params[0]); 
     String result = ruc.sendPostRequest(URL2, data); 

     Log.v("Result value", result); 
     // parse json data 
     try { 
      JSONArray jArray = new JSONArray(result); 
      for (int i = 0; i < jArray.length(); i++) { 
       JSONObject jsonObject = jArray.getJSONObject(i); 
        hashMap.put("j_id",jsonObject.getString("j_id")); 
        hashMap.put("j_title",jsonObject.getString("j_title")+""); 
        list.add(hashMap);//add the hashmap into arrayList 

       // add interviewee name to arraylist 
       //list2.add(jsonObject.getString("j_title")); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return result; 
} 
protected void onPostExecute(String s) { 
    loading.dismiss(); 
    //list.add(hashMap); 
    dataAdapter.notifyDataSetChanged(); 
    intent = getIntent(); 
    jobsbycategory = intent.getStringExtra("jobsbycategory"); 
    txt2.setText("Job Sector: " + " " + jobsbycategory); 
    Toast.makeText(getApplicationContext(), jobsbycategory, Toast.LENGTH_SHORT).show(); 

} 

Каждая поддержка оценена.

ответ

2

Вы используете один и тот же объект HashMap каждый раз и переписываете новые значения по старым значениям, поэтому вам нужно создать новый HashMap на каждой итерации.

Ваш список содержит единственную ссылочную переменную в каждой позиции, поэтому в последней итерации, если вы измените значение в этой hashmap, каждый элемент в списке будет иметь такое же значение, поскольку каждый элемент в списке указывает на одну ссылку hashmap

 // parse json data 
      data.put("jobsbycategory", params[0]); 
      String result = ruc.sendPostRequest(URL2, data); 

      Log.v("Result value", result); 
      // parse json data 
      try { 
       JSONArray jArray = new JSONArray(result); 
       for (int i = 0; i < jArray.length(); i++) { 

         hashMap = new HashMap<String, String>>(); 
         //^^^^^^^^^^ add this line 
        JSONObject jsonObject = jArray.getJSONObject(i); 
         hashMap.put("j_id",jsonObject.getString("j_id")); 
         hashMap.put("j_title",jsonObject.getString("j_title")+""); 
         list.add(hashMap);//add the hashmap into arrayList 

        // add interviewee name to arraylist 
        //list2.add(jsonObject.getString("j_title")); 
       } 

Для получения более подробной информации

Is Java “pass-by-reference” or “pass-by-value”?

+0

я реализую предложение, и пусть вы знаете, как можно скорее. @Pavneet Singh. Спасибо. – Edwinfad

+1

Я сделал это, и это сработало. Благодарю вас, и Бог благословит вас. – Edwinfad

+0

@ Edwinfad Я рад, я мог бы помочь, счастливое кодирование :) –

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

  • Нет связанных вопросов^_^