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:
Ici la classe ou je récupère les données de mon API:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
La classe InputStreamOperations:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Ma classe "Musee" que j'ai crée pour crée et traiter mes objets musee
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Merci à celui ou ceux qui trouveront.
Et bonne année![]()
Partager