Partage
  • Partager sur Facebook
  • Partager sur Twitter

Android et JSON

Sujet résolu
    27 octobre 2014 à 18:08:22

    Bonsoir la famille,

    Je suis encore novice dans le domaine du développement sous android, et j'ai rencontré un problème qui me fatigue un peu trop en effet je travaille sur un petit projet dans lequel l'utilisateur va se connecter à un web service et je n'arrive pas à me connecter au service web en effet quand j'essaie de me connecter je reçois ce message d'erreur

    10-27 17:16:33.092: E/JSON Parser(6838): Error parsing data org.json.JSONException: Value <html><head><title>Apache of type java.lang.String cannot be converted to JSONObject
    10-27 17:16:33.092: W/dalvikvm(6838): threadid=11: thread exiting with uncaught exception (group=0x40dc59d8)
    10-27 17:16:33.102: E/AndroidRuntime(6838): FATAL EXCEPTION: AsyncTask #1
    10-27 17:16:33.102: E/AndroidRuntime(6838): java.lang.RuntimeException: An error occured while executing doInBackground()
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at android.os.AsyncTask$3.done(AsyncTask.java:278)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.lang.Thread.run(Thread.java:856)
    10-27 17:16:33.102: E/AndroidRuntime(6838): Caused by: java.lang.NullPointerException
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at com.modelisgis.dtmobile.connexion.Login$AttemptLogin.doInBackground(Login.java:110)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at com.modelisgis.dtmobile.connexion.Login$AttemptLogin.doInBackground(Login.java:1)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at android.os.AsyncTask$2.call(AsyncTask.java:264)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    10-27 17:16:33.102: E/AndroidRuntime(6838): 	... 5 more
    10-27 17:16:33.412: D/memalloc(6838): /dev/pmem: Unmapping buffer base:0x51b5f000 size:2437120 offset:1822720
    10-27 17:16:33.412: D/memalloc(6838): /dev/pmem: Unmapping buffer base:0x51fa2000 size:4894720 offset:4280320
    10-27 17:16:33.422: D/memalloc(6838): /dev/pmem: Unmapping buffer base:0x5260d000 size:5509120 offset:4894720
    10-27 17:16:33.602: E/WindowManager(6838): Activity com.modelisgis.dtmobile.connexion.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4158c688 that was originally added here
    10-27 17:16:33.602: E/WindowManager(6838): android.view.WindowLeaked: Activity com.modelisgis.dtmobile.connexion.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4158c688 that was originally added here
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.ViewRootImpl.<init>(ViewRootImpl.java:348)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.Window$LocalWindowManager.addView(Window.java:537)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.app.Dialog.show(Dialog.java:289)
    10-27 17:16:33.602: E/WindowManager(6838): 	at com.modelisgis.dtmobile.connexion.Login$AttemptLogin.onPreExecute(Login.java:88)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.os.AsyncTask.execute(AsyncTask.java:511)
    10-27 17:16:33.602: E/WindowManager(6838): 	at com.modelisgis.dtmobile.connexion.Login.onClick(Login.java:67)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.View.performClick(View.java:3524)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.view.View$PerformClick.run(View.java:14194)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.os.Handler.handleCallback(Handler.java:605)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.os.Looper.loop(Looper.java:137)
    10-27 17:16:33.602: E/WindowManager(6838): 	at android.app.ActivityThread.main(ActivityThread.java:4476)
    10-27 17:16:33.602: E/WindowManager(6838): 	at java.lang.reflect.Method.invokeNative(Native Method)
    10-27 17:16:33.602: E/WindowManager(6838): 	at java.lang.reflect.Method.invoke(Method.java:511)
    10-27 17:16:33.602: E/WindowManager(6838): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
    10-27 17:16:33.602: E/WindowManager(6838): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
    10-27 17:16:33.602: E/WindowManager(6838): 	at dalvik.system.NativeStart.main(Native Method)
    10-27 17:16:33.612: D/memalloc(6838): /dev/pmem: Unmapping buffer base:0x52dc3000 size:122880 offset:0
    10-27 17:16:33.612: D/memalloc(6838): /dev/pmem: Unmapping buffer base:0x52de1000 size:245760 offset:122880
    10-27 17:16:33.612: D/memalloc(6838): /dev/pmem: Unmapping buffer base:0x52e1d000 size:368640 offset:245760
    



    Voici ma classe Login.java

    package com.modelisgis.dtmobile.connexion;
    
    import com.modelisgis.dtmobile.*;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class Login extends Activity implements OnClickListener{
    	
    	private EditText user, pass;
    	private Button mSubmit;
    	
    	 // Progress Dialog
        private ProgressDialog pDialog;
     
        // JSON parser class
        JSONParser jsonParser = new JSONParser();
        
        
        private static final String LOGIN_URL = "http://url:port/security/logon.json";
        
      
        private static final String TAG_SUCCESS = "success";
        private static final String TAG_MESSAGE = "message";
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.login);
    		
    		//setup input fields
    		user = (EditText)findViewById(R.id.username);
    		pass = (EditText)findViewById(R.id.password);
    		
    		//setup buttons
    		mSubmit = (Button)findViewById(R.id.connexion);
    		
    		
    		//register listeners
    		mSubmit.setOnClickListener(this);
    		
    	}
    
    	@Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
    		switch (v.getId()) {
    		case R.id.connexion:
    				new AttemptLogin().execute();
    			break;
    		default:
    			break;
    		}
    	}
    	
    	class AttemptLogin extends AsyncTask<String, String, String> {
    
    		 /**
             * Before starting background thread Show Progress Dialog
             * */
    		boolean failure = false;
    		
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(Login.this);
                pDialog.setMessage("Chargement...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();
            }
    		
    		@Override
    		protected String doInBackground(String... args) {
    			// TODO Auto-generated method stub
    			 // Check for success tag
                Boolean success;
                String username = user.getText().toString();
                String password = pass.getText().toString();
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("email", username));
                    params.add(new BasicNameValuePair("mdp", password));
     
                    Log.d("request!", "starting");
                    // getting product details by making HTTP request
                    JSONObject json = jsonParser.makeHttpRequest(
                           LOGIN_URL, "POST", params);
     
                    // check your log for json response
                    Log.d("Login attempt", json.toString());
     
                    // json success tag
                    success = json.getBoolean(TAG_SUCCESS);
                    if (success == true) {
                    	Log.d("Login Successful!", json.toString());
                    	Intent i = new Intent(Login.this, MainActivity.class);
                    	finish();
        				startActivity(i);
                    	return json.getString(TAG_MESSAGE);
                    }else{
                    	Log.d("Login Failure!", json.getString(TAG_MESSAGE));
                    	return json.getString(TAG_MESSAGE);
                    	
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
     
                return null;
    			
    		}
    		/**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) {
                // dismiss the dialog once product deleted
                pDialog.dismiss();
                if (file_url != null){
                	Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
                }
     
            }
    		
    	}
    		 
    
    }
    

    Hier ça marchait mais je ne sait pas pourquoi aujourd'hui ça ne fonctionne plus.

    Merci d'avance


    -
    Edité par Androu225 27 octobre 2014 à 18:19:04

    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2014 à 21:15:08

      Salut,

      Tu sembles avoir plusieurs erreurs. Tout d'abord, d'après la log, ton json n'est pas valide ! Tu sembles plutôt recevoir du HTML que du json.

      Ensuite, à la ligne 110 de ton fichier, tu tentes d'afficher ton json, mais celui-ci n'ayant pas été correctement parsé, ton objet et null. Le fait de faire un json.toString() génère alors une erreur de type NullPointerException.

      • Partager sur Facebook
      • Partager sur Twitter
        28 octobre 2014 à 10:24:27

        Je pense que ça doit venir de ma classe JSONParser.java que voici

        package com.modelisgis.dtmobile.connexion;
        
        import java.io.BufferedReader;
        import java.io.IOException;
        import java.io.InputStream;
        import java.io.InputStreamReader;
        import java.io.UnsupportedEncodingException;
        import java.util.List;
         
        import org.apache.http.HttpEntity;
        import org.apache.http.HttpResponse;
        import org.apache.http.NameValuePair;
        import org.apache.http.client.ClientProtocolException;
        import org.apache.http.client.entity.UrlEncodedFormEntity;
        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 JSONParser {
         
            static InputStream is = null;
            static JSONObject jObj = null;
            static String json = "";
         
            // constructor
            public JSONParser() {
         
            }
         
            // function get json from url
            // by making HTTP POST or GET mehtod
            public JSONObject makeHttpRequest(String url, String method,
                    List<NameValuePair> params) {
         
                // Making HTTP request
                try {
         
                    // check for request method
                    if(method == "POST"){
                        // request method is POST
                        // defaultHttpClient
                        DefaultHttpClient httpClient = new DefaultHttpClient();
                        HttpPost httpPost = new HttpPost(url);
                        httpPost.setEntity(new UrlEncodedFormEntity(params));
         
                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        HttpEntity httpEntity = httpResponse.getEntity();
                        is = httpEntity.getContent();
         
                    }           
         
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
         
                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();
                    json = sb.toString();
                } catch (Exception e) {
                    Log.e("Buffer Error", "Error converting result " + e.toString());
                }
         
                // try parse the string to a JSON object
                try {
                    jObj = new JSONObject(json);
                } catch (JSONException e) {
                    Log.e("JSON Parser", "Error parsing data " + e.toString());
                }
         
                // return JSON String
                return jObj;
         
            }
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2014 à 10:42:20

          As-tu vérifié ce que renvoie ton web service : http://url:port/security/logon.json ?

          -
          Edité par rolandl 28 octobre 2014 à 10:49:29

          • Partager sur Facebook
          • Partager sur Twitter
            28 octobre 2014 à 17:49:52

            Ah oouiii C'est de la  que vient le problème. Merci @Wapiti89 ;)
            • Partager sur Facebook
            • Partager sur Twitter

            Android et JSON

            × 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