xenonmax Posté(e) 11 novembre 2011 Share Posté(e) 11 novembre 2011 Bonjour à tous, J'ai un problème sans doute dans mon code que je n'arrive pas à trouver. Mon appli, je vais chercher dans une base de données des données (xD comme si on le savait pas), et je veux les afficher dans une listView, problème le logCat me retourne un NullPointerException. Voici le code : JsonListViewActivity : package fr.emergenceit.net; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ListActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class JsonListViewActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); JSONObject json = JSONfunctions.getJSONfromURL("http://192.168.1.79/ville/ville.php"); try{ JSONArray pharmacie = json.getJSONArray("pharmacie"); for(int i=0;i<pharmacie.length();i++){ HashMap<String, String> map = new HashMap<String, String>(); JSONObject e = pharmacie.getJSONObject(i); map.put("nomph", "ID_ville:" + e.getString("ID_ville")); map.put("lat", "Nom_ville: " + e.getString("Nom_ville")); mylist.add(map); } } catch(JSONException e) { Log.e("log_tag", "Error parsing data "+e.toString()); } ListAdapter adapter = new SimpleAdapter( this, mylist, R.layout.main, new String[] { "nomph", "lat" }, new int[] { R.id.item_title, R.id.item_subtitle }); setListAdapter(adapter); final ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { @SuppressWarnings("unchecked") HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position); Toast.makeText(JsonListViewActivity.this, "ID '" + o.get("id") + "'was clicked.", Toast.LENGTH_SHORT).show(); } }); } } JSONfunctions.java : package fr.emergenceit.net; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JSONfunctions { public static JSONObject getJSONfromURL(String url){ InputStream is = null; String result = ""; JSONObject jArray = null; //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch(Exception e) { Log.e("log_tag", "Error in http connection "+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); } catch(Exception e) { Log.e("log_tag", "Error converting result "+e.toString()); } try{ jArray = new JSONObject(result); } catch(JSONException e ){ Log.e("log_tag", "Error parsing data "+e.toString()); } return jArray; } } ville.php affiche : [{"ID_ville":"1","Nom_ville":"Paris"},{"ID_ville":"2","Nom_ville":"Lille"},{"ID_ville":"3","Nom_ville":"Marseille"},{"ID_ville":"4","Nom_ville":"Lyon"},{"ID_ville":"5","Nom_ville":"Toulouse"},{"ID_ville":"6","Nom_ville":"Bordeaux"},{"ID_ville":"7","Nom_ville":"Nimes"}] LogCat : 11-11 13:53:25.623: E/AndroidRuntime(1715): Uncaught handler: thread main exiting due to uncaught exception 11-11 13:53:25.633: E/AndroidRuntime(1715): java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.emergenceit.net/fr.emergenceit.net.JsonListViewActivity}: java.lang.NullPointerException 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.os.Handler.dispatchMessage(Handler.java:99) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.os.Looper.loop(Looper.java:123) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.ActivityThread.main(ActivityThread.java:4363) 11-11 13:53:25.633: E/AndroidRuntime(1715): at java.lang.reflect.Method.invokeNative(Native Method) 11-11 13:53:25.633: E/AndroidRuntime(1715): at java.lang.reflect.Method.invoke(Method.java:521) 11-11 13:53:25.633: E/AndroidRuntime(1715): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 11-11 13:53:25.633: E/AndroidRuntime(1715): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 11-11 13:53:25.633: E/AndroidRuntime(1715): at dalvik.system.NativeStart.main(Native Method) 11-11 13:53:25.633: E/AndroidRuntime(1715): Caused by: java.lang.NullPointerException 11-11 13:53:25.633: E/AndroidRuntime(1715): at fr.emergenceit.net.JsonListViewActivity.onCreate(JsonListViewActivity.java:31) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-11 13:53:25.633: E/AndroidRuntime(1715): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 15 novembre 2011 Share Posté(e) 15 novembre 2011 Comme le montre les logs, tu as une NullPointerException en ligne 31 de ton activity, c'est là qu'il aurait fallu chercher... Mais, au vu du code, il y a quelques petits points qui font, à mon avis, que ça ne marche pas: - le parsing d'une chaîne au format JSON se fait à l'aide de la classe JSONTokener, pas directement avec JSONObject - ton script PHP te retourne un tableau d'objets, pas un objet, et donc ta méthode de parsing devrait retourner un JSONArray, pas un JSONObject Voila les corrections que tu pourrais apporter: - dans la classe JSONFunctions, remplacer la ligne jArray = new JSONObject(result); par jArray = (JSONArray)new JSONTokener(result).nextValue(); et changer le type de retour de la fonction getJSONFromUrl en JSONArray - dans la classe de ton Activity, supprimer la ligne JSONObject json = JSONfunctions.getJSONfromURL("http://192.168.1.79/ville/ville.php"); et remplacer la ligne JSONArray pharmacie = json.getJSONArray("pharmacie"); par JSONArray pharmacie = JSONfunctions.getJSONfromURL("http://192.168.1.79/ville/ville.php"); Cela devrait ensuite mieux fonctionner 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
xenonmax Posté(e) 15 novembre 2011 Auteur Share Posté(e) 15 novembre 2011 Merci beaucoup de ta réponse mais malheureusement j'ai déjà résolu le problème hier soir (j'ai pas eu le temps de venir ici mettre résolu). En faite je pense qu'avec ta méthode çà marcherai, mais moi j'ai triché dans mon code PHP pour que çà marche ^^ Enfin bon tant que çà marche c'est mon patron qui est content. Juste dommage que la communauté ne soit pas plus présente sur ce forum. D'ailleurs on fait comment pour mettre en résolut ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.