Problème d'affichage de donnée d'une ArrayList dans une ListView
Bonjour à tous,
J'avais déjà poster ici sans avoir eu de réponse ou mon problème n'est toujours pas résolu, donc je ré-ouvre un nouveau topic.
Je récupère une liste JSON de musées et je dois l'affiché dans un tableau, mais à chaque fois, lorsque je compile mon application crash.
Je ne sais pas vraiment comment affichés mes données après plusieurs jours, après avoir tester plusieurs choses et plusieurs tutoriel, je reviens ici.
Je vous montre mon code.
Mon Activity:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
package com.example.eric.listemuseebfast;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.appindexing.Thing;
import com.google.android.gms.common.api.GoogleApiClient;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends ListActivity {
private ListView lv;
ArrayList<Musee> musee = new ArrayList<Musee>();
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.list);
sendList(musee);
lv.setAdapter(sendList(musee));
Intent myIntent = new Intent(MainActivity.this, MuseeList.class);
myIntent.putExtra(String.valueOf(android.R.id.list), (Parcelable) musee);
startActivity(myIntent);
ArrayAdapter<Musee> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, (Parcelable) Musee.add(musee));
lv.setAdapter(adapter);
//J'avais aussi tenter de crée cette fonction dans mon activity
public ListAdapter sendList(ArrayList<Musee> musees) {
System.out.println("^^^^^^" + ApiListeMusee.getMusees());
ArrayAdapter adapt = new ArrayAdapter<Musee>(this, R.layout.activity_main, R.id.list, ApiListeMusee.getMusees());
ApiListeMusee.getMusees().clear();
ApiListeMusee.getMusees().addAll(musees);
adapt.notifyDataSetChanged();
return adapt;
}
} |
Ici la classe ou je récupère les données de mon API:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
package com.example.eric.listemuseebfast;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
/**
* Created by on 24/12/2016.
*/
public class ApiListeMusee {
public static ArrayList<Musee> getMusees() {
ArrayList<Musee> musees = new ArrayList<>();
try {
String myurl= "J4ai caché l'url de l'api qui est en JSON";
URL url = new URL(myurl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream inputStream = connection.getInputStream();
/*
* InputStreamOperations est une classe complémentaire:
* Elle contient une méthode InputStreamToString.
*/
String result = InputStreamOperations.InputStreamToString(inputStream);
// On récupère le JSON complet
JSONObject jsonObject = new JSONObject(result);
// On récupère le tableau d'objets qui nous concernent
JSONArray array = new JSONArray(jsonObject.getString("musées"));
// Pour tous les objets on récupère les infos
for (int i = 0; i < array.length(); i++) {
// On récupère un objet JSON du tableau
JSONObject obj = new JSONObject(array.getString(i));
// On fait le lien sur les musées - Objet JSON
Musee musee = new Musee();
musee.setDataSetid(obj.getString("datasetid"));
musee.setRecordid(obj.getString("recordid"));
musee.setFields(obj.getString("fields"));
musee.setPeriode_ouverture(obj.getString("periode_ouverture"));
musee.setNom_du_musee(obj.getString("nom_du_musee"));
// On ajoute le musée à la liste
musee.add(musees);
}
} catch (Exception e) {
e.printStackTrace();
}
// On retourne la liste des musées
return musees;
}
} |
La classe InputStreamOperations:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
package com.example.eric.listemuseebfast;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by Eric on 24/12/2016.
*/
public class InputStreamOperations {
/**
* @param in : buffer with the php result
* @param bufSize : size of the buffer
* @return : the string corresponding to the buffer
*/
public static String InputStreamToString (InputStream in, int bufSize) {
final StringBuilder out = new StringBuilder();
final byte[] buffer = new byte[bufSize];
try {
for (int ctr; (ctr = in.read(buffer)) != -1;) {
out.append(new String(buffer, 0, ctr));
}
} catch (IOException e) {
throw new RuntimeException("Cannot convert stream to string", e);
}
// On retourne la chaine contenant les données de l'InputStream
return out.toString();
}
/**
* @param in : buffer with the php result
* @return : the string corresponding to the buffer
*/
public static String InputStreamToString (InputStream in) {
// On appel la methode precedente avec une taille de buffer par defaut
return InputStreamToString(in, 1024);
}
} |
Ma classe "Musee" que j'ai crée pour crée et traiter mes objets musee
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
package com.example.eric.listemuseebfast;
import java.util.ArrayList;
/**
* Created by on 26/12/2016.
*/
public class Musee extends ApiListeMusee{
//@Test
//public ArrayList<Musee> musees = new ArrayList<Musee>();
private String datasetid;
private String recordid;
private String fields;
private String periode_ouverture;
private String nom_du_musee;
//On appel le constructeur de notre class dans le main pour afficher la liste des musées?
//Mes constructeurs
public Musee() {}
public Musee(String datesetid, String recordid, String fields, String periode_ouverture, String nom_du_musee) {
this.datasetid = "datasetid";
this.recordid = "recordid";
this.fields = "fields";
this.periode_ouverture = "periode_ouverture";
this.nom_du_musee = "nom_du_musee";
}
//Surcharge du constructeur Musee
//On appel la methode getMusee() pour récupérer les musées que nous renvoie l'api JSON
//Mes accesseurs getter + setter
public String getDataSetid() {
return datasetid;
}
public String getRecordid() {
return recordid;
}
public String getfields() {
return fields;
}
public String getPeriode_ouverture() {
return periode_ouverture;
}
public String getNom_du_musee() {
return nom_du_musee;
}
public void setDataSetid(String datasetid) {
this.datasetid = datasetid;
}
public void setRecordid(String recordid) {
this.recordid = recordid;
}
public void setFields(String fields) {
this.fields = fields;
}
public void setPeriode_ouverture(String periode_ouverture) {
this.periode_ouverture = periode_ouverture;
}
public void setNom_du_musee(String nom_du_musee) {
this.nom_du_musee = nom_du_musee;
}
//Ajouter la liste
public ArrayList add(ArrayList<Musee> musees) {
//Ajouter tout ces attributs dans mon ArrayList, création d'objet Musee
for(int i = 0; i < musees.size(); i++)
{
Musee musee = new Musee();
musee.datasetid = getDataSetid();
musee.recordid = getRecordid();
musee.fields = getfields();
musee.periode_ouverture = getPeriode_ouverture();
musee.nom_du_musee = getNom_du_musee();
this.add(musees);
}
return musees;
}
//test de deboggage pour le passage de données
public static String afficherText() {
String texte;
texte = ("test");
return texte;
}
} |
En espérant que quelqu'un trouve d'où vient mon problème, qu'est ce qu'il manque et qu'est ce qui ne va pas.
Merci à celui ou ceux qui trouveront.
Et bonne année :)