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.
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.
Ah oouiii C'est de la que vient le problème. Merci @Wapiti89
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.
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog