Salut à tous,
Je suis nouvelle dans la programmation et j'aimerais bien qu'on m'explique comment utiliser le JSON objet. Tous les tutoriels que j'ai trouvés expliquent plutôt comment utiliser le JSON array. Merci d'avance pour votre aide.
Salut à tous,
Je suis nouvelle dans la programmation et j'aimerais bien qu'on m'explique comment utiliser le JSON objet. Tous les tutoriels que j'ai trouvés expliquent plutôt comment utiliser le JSON array. Merci d'avance pour votre aide.
Aurais-tu des exemples de code de ce que tu souhaites faire exactement.
Sans demande plus précise, on ne pourra t'aiguiller.
Je te conseille quand même ce tutoriel, qui montre l'utilisation des JSONObject.
Certes, ce tutoriel instancie un JSonArray depuis le résultat, mais l'instanciation est la même pour un JSonObject.
salut Gahfy,
voici mon code:
le code fonctionne malheureusement ca ne fait pas ce q je veux....ca ne lit pas les données du Json suivant url: http://bucapp.de/bcarest.php?getMember=1
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 public class Vue2 extends Activity { public static final String JSON_STRING="{\"member\":{\"id\":1,\"company\":\"Creative AdIT\",\"firstname\":\"0\",\"lastname\":\"Witte\"}}"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bc_layout); TextView textView1=(TextView)findViewById(R.id.textView1); try{ JSONObject emp=(new JSONObject(JSON_STRING)).getJSONObject("member"); int id =emp.getInt("id"); String company = emp.getString("company"); String firstname = emp.getString("firstname"); int lastname=emp.getInt("lastname"); String str="ID:"+id+"\n"+"Company:"+company+"\n"+"Firstname:"+firstname+"\n"+"Lastname:"+lastname; textView1.setText(str); }catch (Exception e) {e.printStackTrace();} }
le tutorial que m a conseilé a appliqué la meme methode
C'est bien tu as fait une bonne partie des étapes déjà.
Si on prend le code complet, que fait-il ?
a) Il met en place les views dans l'activité (conseil #1: utilise des noms explicites pour tes classes. Vue2 n'est pas explicite. VueDunMembreActivity l'est déjà plus).
b) Il va chercher des données
c) Il affiche ces données dans les views.
Donc sépare le code pour que ces 3 élements soient bien des fonctions séparées:
a) => onCreate (et lancement de b)
b) => "loadData" (et lancement de c)
c) => "setData"
Comme la partie "b" est potentiellement longue, on utilse une tâche asynchrone pour la réaliser (AsyncTask)
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 class Vue2 extends Activity { private static final String JSON_STRING="{\"member\":{\"id\":1,\"company\":\"Creative AdIT\",\"firstname\":\"0\",\"lastname\":\"Witte\"}}"; private TextView tv; // <= trouver un nom explicite pour ce TextView @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bc_layout); this.tv = (TextView) findViewById(R.id..textView1); // <= là encore textView1 c'est pas très explicite ! new LoadDataTask().execute(); } class LoadDataTask extends AsyncTask<Void,Void,String> { public String doInBackground() { try { return JSON_STRING; } catch (Exception e) { Log.e("Vue2","Data loading error",e); return null; } } public void onPostExecute(String data) { if (data != null) { try { JSONObject emp=(new JSONObject(data)).getJSONObject("member"); int id =emp.getInt("id"); String company = emp.getString("company"); String firstname = emp.getString("firstname"); int lastname=emp.getInt("lastname"); String str="ID:"+id+"\n"+"Company:"+company+"\n"+"Firstname:"+firstname+"\n"+"Lastname:"+lastname; Vue2.this.setData(str); } catch (Exception e) { Log.e("Vue2","Erreur de lecture JSON",e); // <= on utilise les fonctions de Log Android, bien pratiques ! } } } } void setData(String str) { this.tv.setText(str); } }
Une fois que tout est bien découpé on voit que la seule partie à remplacer est la partie "return JSON_STRING" dans le doInBackground pour aller chercher sur un web-service....
HttpClient / UrlConnection après y a que l'embarras du choix pour récupérer les données....
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 HttpClient client = AndroidHttpClient.newInstance("monApp"); HttpGet request = new HttpGet("http://bucapp.de/bcarest.php?getMember=1"); HttpResponse response = client.execute(request); return EntityUtils.toString(response.getEntity(),"UTF-8");
Il me semble que c'est par ça : API Android developer.
Une petite page d'info en anglais sur le pourquoi : Jesse Wilson Blog.
Bonne continuation !
Elenge.
Oui c'est par URLConnection
Son seul défaut est de devoir réinventer la roue à chaque fois (avec toute la tringlerie des lecture de content-type, charset, etc...)
Franchement lire un multipart JSON en UTF-7 qui a été zippé par le serveur par URLConnection c'est une galère sans nom.
Avec HttpClient, cela se fait en 1 appel de fonction... EntityUtils.toString() !
salut à tous,
quelqu un a t il un tutorial sur le sujet suivant: comment lire un Json array sans nom a partir d un URL
merci bien
voici ma code: il ne fonctionne pas
private static String url = "http://bucapp.de/bcarest.php?getRelations=1";
JSONArray json = null;
// Hashmap for ListView
ArrayList<JSONArray> contactList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.durchsuchen_layout);
contactList = new ArrayList<>();
new GetJson().execute();}
private class GetJson extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(Vue5.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr != null) {
try
{
//This should be your JSONArray
if(json.length() > 0)
{
for (int i=0; i<json.length(); i++) {
JSONObject jsonObject = new JSONObject(json.getString(i));
String firstname = jsonObject.getString("firstname");
//String compagny = jsonObject.getString("compagny");
//String twitter = jsonObject.getString("twitter");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
C est un JsonArray ki est coe celui ci: http://bucapp.de/bcarest.php?getRelations=1
Ouvre le lien....
Ah ok... Dans ce cas, tu dois récupérer le résultat de ta requête dans un objet JsonArray à la place d'utiliser JsonObject. Malheureusement j'ai des sérieux problèmes avec mon SDK et Android Studio pour te produire un code fonctionnel. Sinon, je peux te donner des indications.
- Premièrement, parce que tu veux récupérer les données dans un ArrayList, je te propose de créer une classe qui te permettra de représenter tes données simplement et de manière propre. Cette classe peut se présenter de la manière suivante :
- Ensuite, je te demande de reprendre le code que tu avais tapé récemment avec l'aide de nicroman et qui marché (avec AsyncTast). seulement, dans la méthode onPostExecute(...) de ta classe qui étend AsyncTask récupère le résultat de la requête en tant que JsonArray comme suit :
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182 //Créée avec NetBeans IDE. public class Data { String id; String company; String fistname; String lastname; String address1; String address2; String zip; String city; String country; String phone; String mobile; String email; String website; String facebook; String googleplus; String xing; String layout; String member_a; String member_b; //Getters //======= public String getAddress1() { return address1; } public String getAddress2() { return address2; } public String getCity() { return city; } public String getCompany() { return company; } public String getCountry() { return country; } public String getEmail() { return email; } public String getFacebook() { return facebook; } public String getFistname() { return fistname; } public String getGoogleplus() { return googleplus; } public String getId() { return id; } public String getLastname() { return lastname; } public String getLayout() { return layout; } public String getMember_a() { return member_a; } public String getMember_b() { return member_b; } public String getMobile() { return mobile; } public String getPhone() { return phone; } public String getWebsite() { return website; } public String getXing() { return xing; } public String getZip() { return zip; } //Setters //======= public void setAddress1(String address1) { this.address1 = address1; } public void setAddress2(String address2) { this.address2 = address2; } public void setCity(String city) { this.city = city; } public void setCompany(String company) { this.company = company; } public void setCountry(String country) { this.country = country; } public void setEmail(String email) { this.email = email; } public void setFacebook(String facebook) { this.facebook = facebook; } public void setFistname(String fistname) { this.fistname = fistname; } public void setGoogleplus(String googleplus) { this.googleplus = googleplus; } public void setId(String id) { this.id = id; } public void setLastname(String lastname) { this.lastname = lastname; } public void setLayout(String layout) { this.layout = layout; } public void setMember_a(String member_a) { this.member_a = member_a; } public void setMember_b(String member_b) { this.member_b = member_b; } public void setMobile(String mobile) { this.mobile = mobile; } public void setPhone(String phone) { this.phone = phone; } public void setWebsite(String website) { this.website = website; } public void setXing(String xing) { this.xing = xing; } public void setZip(String zip) { this.zip = zip; } }
Je crois t'avoir donnée une piste, à toi de l'exploiter. Si souci, n'hésite 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 //Un peu plus haut dans le code, tu commences par déclarer un ArrayList de Data (rappelle toi de la classe Data...) ArrayList<Data> listData = new ArrayList(); //........ //........ public void onPostExecute(String resultat){ Data uneLigne; if (resultat!= null) { try { //Récupération du résultat en tant que JsonArray JSONArray jArray = new JSONArray(resultat); //Parcours de la liste for (int i=0; i < jArray.length(); i++) { //Récupérer une ligne JSONObject jobData= jArray.getJSONObject(i); //Créer un objet Data pour récupérer une ligne uneLigne = new Data(); //Récupération des informations dans l'objet uneLigne uneLigne.setId(jobData.getString("id")); uneLigne.setCompany(jobData.getString("company")); //...Et ainsi de suite jusqu'au dernier élément de la ligne... //Enfin, ajouter l'objet dans le ArrayList listData.add(uneLigne); } } catch (Exception e) { Log.e("Vue2","Erreur de lecture JSON",e); // <= on utilise les fonctions de Log Android, bien pratiques ! } }
PS : Je n'ai pas tester le code, prière de ne pas me tenir rigueur
Christian,
Salut Christian,
voici mn code j espere q j ai bien suivis tes conseils...mais ca ne m affiche rien, je n ai aucune erreur:merci de m aider
public class ViewSuche extends Activity {
private ProgressDialog pDialog;
// List view
private ListView lv;
// Search EditText
EditText inputSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.durchsuchen_layout);
new LoadDataTask().execute();
}
class LoadDataTask extends AsyncTask<Void,Void,String> {
ArrayList<ContactModel> listContactModel = new ArrayList();
@Override
protected String doInBackground(Void... params) {
try {
//return JSON_STRING;
HttpClient client = AndroidHttpClient.newInstance("monApp");
HttpGet request = new HttpGet("http://bucapp.de/bcarest.php?getRelations=1");
HttpResponse response = client.execute(request);
return EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
Log.e("VewSuche", "Data loading error", e);
return null;
}
}
public void onPostExecute(String resultat) {
ContactModel uneLigne;
if (resultat != null) {
try {
//R�cup�ration du r�sultat en tant que JsonArray
JSONArray jArray = new JSONArray(resultat);
//Parcours de la liste
for (int i = 0; i < jArray.length(); i++) {
//R�cup�rer une ligne
JSONObject jobData = jArray.getJSONObject(i);
//Cr�er un objet Data pour r�cup�rer une ligne
uneLigne = new ContactModel();
//R�cup�ration des informations dans l'objet uneLigne
uneLigne.setID(jobData.getLong("id"));
uneLigne.setCompany(jobData.getString("company"));
//...Et ainsi de suite jusqu'au dernier �l�ment de la ligne...
//Enfin, ajouter l'objet dans le ArrayList
listContactModel.add(uneLigne);
}
} catch (Exception e) {
Log.e("ViewSuche", "Erreur de lecture JSON", e); // <= on utilise les fonctions de Log Android, bien pratiques !
}
}
}
}
Tu devrais au moins avoir un message dans le logcat nooon....
Christian,
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager