IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Erreur "NullPointerException"


Sujet :

Android

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 17
    Points : 22
    Points
    22
    Par défaut Erreur "NullPointerException"
    Salut Tout Le Monde,
    je suis débutante en android et j'ai rencontré une exception:NullPointer exception. je n'ai pas arrivé à comprendre la cause du problème. j'ai besoin de votre aide.
    voici mon code: (j'ai mis un commentaire au dessus de la ligne qui contient l'erreur)
    LoginActivity.java
    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
     
    package com.example.myschoolapplicationproject;
     
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
     
    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.apache.http.message.BasicNameValuePair;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
     
    //import com.example.androidhive.library.DatabaseHandler;
    //import com.example.myschoolapplicationproject.library.UserFunctions;
    import com.example.myschoolapplicationproject.*; 
    @SuppressLint("NewApi")
    public class LoginActivity extends Activity implements OnClickListener{
     
     EditText loginEmail, loginPassword;
     Button btnLogin;
     
     String username,password;
     HttpClient httpclient;
     HttpPost httppost;
     ArrayList<NameValuePair> nameValuePairs;
     HttpResponse response;
     HttpEntity entity;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.login);
     
            if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }
     
           initialise();
     
        }
           private void initialise(){
           loginEmail=(EditText)findViewById(R.id.loginEmail);
           loginPassword=(EditText)findViewById(R.id.loginPassword);
           btnLogin =(Button) findViewById(R.id.btnLogin);
           btnLogin.setOnClickListener(this);
           }
            // Link to Register Screen
           /* btnLinkToRegister.setOnClickListener(new View.OnClickListener() {
     
                public void onClick(View view) {
                    Intent i = new Intent(getApplicationContext(),
                            RegisterActivity.class);
                    startActivity(i);
                    finish();
                }
            });*/
    	@Override
    	public void onClick(View v) {
    		// TODO Auto-generated method stub
    		httpclient= new DefaultHttpClient();
    		httppost= new HttpPost ("http://10.0.2.2/AndroidConnect/get_user.php");
    	    username=loginEmail.getText().toString();
    	    password=loginPassword.getText().toString();
     
     
    	    try{
     
                nameValuePairs= new ArrayList<NameValuePair>();
     
    		    nameValuePairs.add(new BasicNameValuePair("username",username));
    		    nameValuePairs.add(new BasicNameValuePair("password",password));
     
    	    	httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    	    	response=httpclient.execute(httppost);
    	    	if(response.getStatusLine().getStatusCode()==200){
    	    		entity= response.getEntity();
    	    		if(entity!=null){
    	    			InputStream instream= entity.getContent();
    	    			//la ligne suivante est la source de l'erreur
    	    			JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));
    		   		     Log.e("connnnnn errooooor","connnnn erroooooor");
    	    			String retUser = jsonResponse.getString("user");
    	    			String retPass=jsonResponse.getString("pass");
    	    			if(username.equals(retUser)&&password.equals(retPass)){
     
    	    				SharedPreferences sp=getSharedPreferences("logindetails",0);
    	    				SharedPreferences.Editor spedit=sp.edit();
    	    				spedit.putString("user",username);
    	    				spedit.putString("password",password);
    	    				spedit.commit();
    	    				Toast.makeText(getBaseContext(), "SUCCES§", Toast.LENGTH_SHORT);
    	    				Log.d("success","welcome");
    	    			}else{
    	    				Log.d("error","invalid log details");
    	    				Toast.makeText(getBaseContext(), "Invalid Login Details", Toast.LENGTH_SHORT).show();
    	    			}
    	    		}
    	    	}
    	    }catch(Exception e){
    	     e.printStackTrace();	
    	     Toast.makeText(getBaseContext(), "Connection Error",Toast.LENGTH_SHORT).show();
    	    }
    	}
    		private Map convertStreamToString(InputStream instream) {
    			// TODO Auto-generated method stub
    			return null;
    		}
        }
    voici mon code php :get_user.php
    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
     
    <?php
    error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
     
    $dbhost="localhost";
    $dbuser="root";
    $dbpass="pfe";
    $dbdb="gestionecole";
     
    $connect=mysql_connect($dbhost,$dbuser,$dbpass) or die("connection error");
     
    mysql_select_db($dbdb) or die("database selection error");
    $Login = $_POST['Login'];
    $MotDePasse = $_POST['MotDePasse'];
     
    $query = mysql_query("SELECT * FROM compte_utilisateur WHERE  Login = $Login AND MotDePasse = $MotDePasse");
    $num = mysql_num_rows($query);
     
    if($num == 1){
    while($list-mysql_fetch_assoc($query)){
    $output = $list;
    echo json_encode($output);
    }
    mysql_close();
    }
    ?>
    j'attends vos aides et merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Plusieurs remarques:

    1. Pour le NullPointerException, le plus important est la stack-trace associée,
    hors elle n'est pas présente dans le message. Du coup, c'est difficile de savoir ou ça se passe !


    2. Le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }
    Est à SUPPRIMER DE TOUTE URGENCE ! En gros il dit: je sais que mon code fait quelque chose de pas bien et d'interdit, mais je m'en fous je le fais quand même !

    3. Le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                 entity= response.getEntity();
                 if(entity!=null){
                          InputStream instream= entity.getContent();
                          //la ligne suivante est la source de l'erreur
                          JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));
    Peut aisément être remplacé par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                 entity= response.getEntity();
                 if (entity != null) { // <= a noter que ce n'est pas possible si on a reçu un code "200" du serveur, si la réponse est vide c'est un 204 qu'il doit renvoyer.
                     JSONObject jsonResponse = new JSONObject(EntityUtils.toString(entity));
                     ...
    Je ne sais pas trop ce que fait la fonction convertStreamToString (que je ne connais pas), mais le code actuel récupère une ressource (un stream), et ne le ferme jamais (y compris en cas d'exception une ressource doit être libérée), en plus convertStreamToString ne prend pas en paramètre l'encoding du stream (présent dans l'Entity), donc il y a (ou il y aura) forcément un bug il ne porura jamais convertir correctement un flux de "byte" (un stream) en "chars".

    4. Encore une fois on n'a pas la stack-trace exacte, car la ligne indiquée par un commentaire (new JSONObject(convertStreamToString()); NE PEUT PAS envoyer de NullPointerException (a aucun moment on n'y accède au membre d'un objet).

    5. Et pour finir, le plus important: Le code d'accès au réseau est fait dans une "onClick", ce qui est fortement interdit depuis Android1.0 (et même dans d'autres systèmes d'exploitation tels que windows)... On ne fait pas d'opérations longues (et un accès réseau l'est toujours: 2x ping au minimum pour requête HTTP), dans le thread qui gère les intéractions avec l'utilisation.
    Utiliser un AsyncTask pour faire ces opérations.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo