Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Plantage d'un code issu d'un tuto

    11 août 2012 à 8:27:10

    Bonjour,

    Je suis entrain de suivre différents tutos pour me familiariser avec la programmation java/android.

    J'ai repris un code issu d'un tuto (dipo ici) mais l'appli plante au démarrage.

    Voici mon code :

    package com.example.dlx;
    
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import android.app.ListActivity;
    import android.net.ParseException;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.Toast;
    
    public class MainActivity extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.main);
            String result = null;
         InputStream is = null;
         JSONObject json_data=null;
         ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
         ArrayList<String> donnees = new ArrayList<String>();
        
         try{
         //commandes httpClient
         HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/mysql.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
         }
         catch(Exception e){
          Log.i("taghttppost",""+e.toString());
                Toast.makeText(getBaseContext(),e.toString() ,Toast.LENGTH_LONG).show();
           }
        
           
         //conversion de la réponse en chaine de caractère
            try
            {
             BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-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.i("tagconvertstr",""+e.toString());
            }
            //recuperation des donnees json
            try{
              JSONArray jArray = new JSONArray(result);
                
                 for(int i=0;i<jArray.length();i++)
                 {
                
                       json_data = jArray.getJSONObject(i);
                       donnees.add(json_data.getString("login"));
                       //r.add(json_data.getString("categorie"));
                       
                   }
                    setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, donnees));
                }
                catch(JSONException e){
                 Log.i("tagjsonexp",""+e.toString());
                } catch (ParseException e) {
                 Log.i("tagjsonpars",""+e.toString());
           }
                
        }
    }
    


    Voici mon manifest :
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.dlx"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="15" />
        
      <uses-permission android:name="android.permission.INTERNET" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/title_activity_main" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    


    Voici le rendu de mysql.php dans mon navigateur

    [{"0":"toto","login":"toto"},{"0":"tutu","login":"tutu"}]
    



    Voici ce que me donne logcat :


    Citation


    08-11 06:13:20.950: E/AndroidRuntime(914): FATAL EXCEPTION: main
    08-11 06:13:20.950: E/AndroidRuntime(914): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dlx/com.example.dlx.MainActivity}: java.lang.NullPointerException
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.ActivityThread.access$600(ActivityThread.java:122)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.os.Handler.dispatchMessage(Handler.java:99)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.os.Looper.loop(Looper.java:137)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.ActivityThread.main(ActivityThread.java:4340)
    08-11 06:13:20.950: E/AndroidRuntime(914): at java.lang.reflect.Method.invokeNative(Native Method)
    08-11 06:13:20.950: E/AndroidRuntime(914): at java.lang.reflect.Method.invoke(Method.java:511)
    08-11 06:13:20.950: E/AndroidRuntime(914): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    08-11 06:13:20.950: E/AndroidRuntime(914): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    08-11 06:13:20.950: E/AndroidRuntime(914): at dalvik.system.NativeStart.main(Native Method)
    08-11 06:13:20.950: E/AndroidRuntime(914): Caused by: java.lang.NullPointerException
    08-11 06:13:20.950: E/AndroidRuntime(914): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
    08-11 06:13:20.950: E/AndroidRuntime(914): at org.json.JSONTokener.nextValue(JSONTokener.java:94)
    08-11 06:13:20.950: E/AndroidRuntime(914): at org.json.JSONArray.<init>(JSONArray.java:87)
    08-11 06:13:20.950: E/AndroidRuntime(914): at org.json.JSONArray.<init>(JSONArray.java:103)
    08-11 06:13:20.950: E/AndroidRuntime(914): at com.example.dlx.MainActivity.onCreate(MainActivity.java:76)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.Activity.performCreate(Activity.java:4465)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    08-11 06:13:20.950: E/AndroidRuntime(914): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
    08-11 06:13:20.950: E/AndroidRuntime(914): ... 11 more



    Si quelqu'un a un début de piste, je suis preneur... Si je n'arrive même pas à suivre un tuto je suis mal parti.... :-(

    Merci pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      11 août 2012 à 22:23:50

      Bonjour,

      A première vue, ton string result vaut null. Soit il n'arrive pas à le récupérer par ta requête HTTP, soit il est mal converti en String.

      PS : J'ai rajouté le tag dans le titre de ton sujet afin qu'il soit conforme aux règles du forum "Mobile". Merci de faire attention à l'avenir.
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        13 août 2012 à 8:48:49

        Merci pour la réponse, je vais suivre cette piste....
        • Partager sur Facebook
        • Partager sur Twitter

        [Android] Plantage d'un code issu d'un tuto

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown