2016-08-02 16 views
0

Zunächst einmal bin ich ein Neuling in Android. Im Moment baue ich eine Anwendung für die Schule. In einem davon Feature gibt es eine Funktion zum Aufrufen welcher Zeitplan für den Schüler. Ich habe Tutorial für diese Funktion lernen, aber es wird mir nicht geben, was ich will. Ich möchte Wert von JSONArray analysieren und dann Werte in ListView anzeigen. Aber es gibt mir nur eine genaue Daten nur.So führen Sie das Analysieren des JSON-Arrays durch, um die Ansicht in Android ohne Array-Schlüssel anzuzeigen

Lassen Sie mich von JSON Array zum ersten Mal starten

JSON Array 

[{ 
"jam_start": "07:30:00", 
"jam_end": "08:05:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Seni Budaya Dan Keterampilan", 
"nama_guru": "Vina Rosiyanti,S.Pd" 
}, { 
"jam_start": "08:06:00", 
"jam_end": "08:40:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Bahasa Indonesia", 
"nama_guru": "Vina Rosiyanti,S.Pd" 
}, { 
"jam_start": "08:41:00", 
"jam_end": "09:15:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Bahasa Indonesia", 
"nama_guru": "Vina Rosiyanti,S.Pd" 
}, { 
"jam_start": "11:01:00", 
"jam_end": "11:35:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Komputer", 
"nama_guru": "Resi Gusta Arina,S.Pd.Gr" 
}, { 
"jam_start": "11:36:00", 
"jam_end": "12:10:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Komputer", 
"nama_guru": "Resi Gusta Arina,S.Pd.Gr" 
}, { 
"jam_start": "13:01:00", 
"jam_end": "13:35:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Ilmu Pengetahuan Alam", 
"nama_guru": "Vina Rosiyanti,S.Pd" 
}, { 
"jam_start": "13:36:00", 
"jam_end": "14:10:00", 
"kegiatan": "Belajar (KBM)", 
"mapel": "Ilmu Pengetahuan Alam", 
"nama_guru": "Vina Rosiyanti,S.Pd" 
}] 

und ich werde mein-Code

MainActivity.java starten

 String schedule = response.toString(); 
     JSONArray array = new JSONArray(schedule); 
     String jamMulai = null; 
     String jamSelesai = null; 
     String kegiatan = null; 
     String mapel = null; 
     String namaGuru = null; 

     for (int i = 0; i < array.length(); i++) { 

      JSONObject arrayELement = array.getJSONObject(i); 
      mapel = arrayELement.getString("mapel"); 
      namaGuru = arrayELement.getString("nama_guru"); 
      kegiatan = arrayELement.getString("kegiatan"); 
      jamMulai = arrayELement.getString("jam_start"); 
      jamSelesai = arrayELement.getString("jam_end"); 

      HashMap<String, String> scheduleDetail = new HashMap<String, String>(); 
      scheduleDetail.put(mapel, mapel); 
      scheduleDetail.put(namaGuru, namaGuru); 
      scheduleDetail.put(kegiatan, kegiatan); 
      scheduleDetail.put(jamMulai, jamMulai); 
      scheduleDetail.put(jamSelesai, jamSelesai); 

      scheduleListDetail.add(scheduleDetail); 
      scheduleList = (ListView)findViewById(R.id.scheduleList); 

      ListAdapter listAdapter = new SimpleAdapter 
        (
          Schedule.this, scheduleListDetail, 
          R.layout.schedulie_list, new String[] 
          {mapel, namaGuru, kegiatan, jamMulai, jamSelesai}, 
          new int[]{R.id.txtNamaPelajaran, R.id.txtNamaGuru, R.id.txtKegiatan, R.id.txtJamMulai, R.id.txtJamSelesai} 
        ); 

      scheduleList.setAdapter(listAdapter); 

     } 

Und das, was ich bekommen falschem Ergebnis

enter image description here

Und das, was ich Suchen Sie nach dem letzten Listenansicht wollen

enter image description here

So helfen Sie mir bitte, wie diese Danke zu beheben, und sorry, wenn mein Englisch nicht so gut

Beste Grüße.

EDIT Dies ist meine Objektklasse

Schedule Object 
public class ScheduleObject { 

private String MataPelajaran; 
private String NamaGuru; 
private String Kegiatan; 
private String JamMulai; 
private String JamSelesai; 

public String getMataPelajaran() { 
    return MataPelajaran; 
} 

public void setMataPelajaran(String mataPelajaran) { 
    MataPelajaran = mataPelajaran; 
} 

public String getNamaGuru() { 
    return NamaGuru; 
} 

public void setNamaGuru(String namaGuru) { 
    NamaGuru = namaGuru; 
} 

public String getKegiatan() { 
    return Kegiatan; 
} 

public void setKegiatan(String kegiatan) { 
    Kegiatan = kegiatan; 
} 

public String getJamMulai() { 
    return JamMulai; 
} 

public void setJamMulai(String jamMulai) { 
    JamMulai = jamMulai; 
} 

public String getJamSelesai() { 
    return JamSelesai; 
} 

public void setJamSelesai(String jamSelesai) { 
    JamSelesai = jamSelesai; 
} 

} 

Und das ist meine Adapterklasse

enter code here 
public class ScheduleAdapter extends ArrayAdapter<ScheduleObject> { 

private final Context context; 
private ArrayList<ScheduleObject> scheduleObjects; 

public ScheduleAdapter(Context context, int textViewResourceId, ArrayList<ScheduleObject> scheduleObjects){ 
    super(context, textViewResourceId, scheduleObjects); 
    this.context = context; 
    this.scheduleObjects = new ArrayList<ScheduleObject>(); 
    this.scheduleObjects.addAll(scheduleObjects); 
} 

private class ViewHolder{ 
    TextView MataPelajaran; 
    TextView NamaGuru; 
    TextView Kegiatan; 
    TextView JamMulai; 
    TextView JamSelesai; 
} 

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

    ViewHolder viewHolder = null; 

    if(convertView == null){ 

     LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.schedulie_list, null); 

     viewHolder = new ViewHolder(); 
     viewHolder.MataPelajaran = (TextView)convertView.findViewById(R.id.txtNamaPelajaran); 
     viewHolder.NamaGuru = (TextView)convertView.findViewById(R.id.txtNamaGuru); 
     viewHolder.Kegiatan = (TextView)convertView.findViewById(R.id.txtKegiatan); 
     viewHolder.JamMulai = (TextView)convertView.findViewById(R.id.txtJamMulai); 
     viewHolder.JamSelesai = (TextView)convertView.findViewById(R.id.txtJamSelesai); 
     convertView.setTag(viewHolder); 
    }else{ 
     viewHolder = (ViewHolder)convertView.getTag(); 
    } 

    ScheduleObject scheduleObject = scheduleObjects.get(position); 
    viewHolder.MataPelajaran.setText(scheduleObject.getMataPelajaran()); 
    viewHolder.NamaGuru.setText(scheduleObject.getNamaGuru()); 
    viewHolder.Kegiatan.setText(scheduleObject.getKegiatan()); 
    viewHolder.JamMulai.setText(scheduleObject.getJamMulai()); 
    viewHolder.JamSelesai.setText(scheduleObject.getJamSelesai()); 

    return convertView; 

} 

} 
+1

Move Adapter aus der for-Schleife – Nilabja

+0

@Nilabja Ich habe bereits meinen Adapter bewegen, aber immer noch nicht funktionieren – BroJay

+0

http://www.androidhive.info/2012/01/android -json-parsing-tutorial/ sieh dies und lass es mich wissen – Nilabja

Antwort

1

Set Adapter nach for-Schleife exicution wie unter

ArrayList<ScheduleObject> allscheduleObjects=new ArrayList<ScheduleObject>(); 
for (int i = 0; i < array.length(); i++) { 
     JSONObject arrayELement = array.getJSONObject(i); 
     ScheduleObject sche_object=new ScheduleObject(); 


     sche_object.setMataPelajaran(arrayELement.getString("mapel")); 
     sche_object.setNamaGuru(arrayELement.getString("nama_guru")); 
     sche_object.setKegiatan(arrayELement.getString("kegiatan")); 
     sche_object.setJamMulai(arrayELement.getString("jam_start")); 
     sche_object.setJamSelesai(arrayELement.getString("jam_end")); 

     allscheduleObjects.add(sche_object); 


    } 
scheduleList = (ListView)findViewById(R.id.scheduleList); 

     ListAdapter listAdapter = new ScheduleAdapter 
       (
         Schedule.this, 
         R.layout.schedulie_list,allscheduleObjects 
       ); 

     scheduleList.setAdapter(listAdapter); 

Hoffnung dies löst Ihr Problem.

+0

Es tut mir leid, es wird nicht funktionieren. gibt mir immer noch nicht, was ich will. – BroJay

+0

können Sie die Adapter-Klasse buchen .. – Andolasoft

+0

Ich habe bereits meine Frage zu bearbeiten, und es gibt meine Objekt-und Adapter-Klasse – BroJay

0

In Android Studio fügen diese Abhängigkeit in build.gradle Ihrer App

compile 'com.fasterxml.jackson.core:jackson-databind:2.4.1.2' 
compile 'com.fasterxml.jackson.core:jackson-core:2.4.1.1' 
compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.1' 

Sie benötigen auch einen POJO für diese, die wie dieser

public class SchoolDTO{ 
private String jam_start; 
private String jam_end; 
private String kegiatan; 
private String maple; 
private String nama_guru; 


... 

your getter setter method 

.... 

} 

dann aussehen wird, wenn Sie versuchen, zu konvertieren string json zu Liste tun Sie einfach

ArrayList<SchoolDTO> schoolDTOs = new ObjectMapper.readValue(response.toString(), new TypeReference<List<SchoolDTO>>(){}); 

dann übergeben Sie die Liste zu Ihrer ListView this wird viel Codezeile speichern

+0

Konnte auf diese reduzieren Abhängigkeiten und nur Gson verwenden –

+0

@ cricket_007 ja richtig können wir auch verwenden Gson –

+0

Es tut mir leid für meine späte Antwort, danke für Ihre Hilfe, ich werde es versuchen, und ich werde Sie wissen lassen – BroJay