Probleme de récupération de mon JSON dans mon java [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
vendredi 12 octobre 2012
Statut
Membre
Dernière intervention
17 mai 2016
-
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
-
Bonjour,

En effet jais crée un page php pour récupérer toutes les villes de ma base de donnée. ce qui fonctionne tres bien. Maintenant je met mon tableau qui contient les villes dans mon json.

Et jai des difficulté pour récupérer ce tableau dans mon code java. Quand je met les Toast pour savoir si jentre dans tous mes try si dessous. je me rend compte que je mon code renvoie une Exception au niveau du try qui contient les requetes http. Je ne sais vraiment pas quoi faire. voici le code php et mon code java. merci déjà.

<?php
$db_user="root";
$db_pass="";
$db_host="localhost";
$db_name="house_finder";
$mysqli = new mysqli($db_host,$db_user,$db_pass,$db_name);
if(mysqli_connect_errno()){
print("Connect failed: %s\n". mysqli_connect_error());
exit();
}
$mysqli->query("SET NAMES 'utf8'");
$sql="SELECT * FROM villes";
$result= $mysqli->query($sql);
while($e=mysqli_fetch_assoc($result)){
$output[]=$e;
}

print(json_encode($output));
$mysqli->close();



?>

sa c le code php et le nom du fichier est recupVille.php. il permet de renvoyer toutes les villes de ma base de données

Le code java est endesous

9 réponses

Messages postés
10
Date d'inscription
vendredi 12 octobre 2012
Statut
Membre
Dernière intervention
17 mai 2016

desoler pour le code java precedent
package com.example.tantine1.housefindpro;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

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.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Tantine1 on 4/28/2016.
 */
public class ajoutBail extends AppCompatActivity {

    //     définition de la variable de l'id du bayeur
    private String idBayeur;
    private Spinner spin_type, spin_ville;
    //private static final String URLV = "http://192.168.10.113:80/client/recupVille.php";

    private String data;

    //declation test
    InputStream is = null;
    String result = null;
    String line = null;
    HttpResponse response;

    String[] ville;
   Spinner spinner_ville;

    private void spinner_fn(){
        ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(ajoutBail.this,R.layout.support_simple_spinner_dropdown_item,ville);
        spinner_ville.setAdapter(dataAdapter1);
        spin_ville.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                spin_ville.setSelection(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ajoutbail);

        spinner_ville = (Spinner)findViewById(R.id.spin_ville);
        final List<String> list1 = new ArrayList<String>();
        Toast.makeText(getApplicationContext(),"avant le try dans ajout ",Toast.LENGTH_LONG).show();
        try{
            Toast.makeText(getApplicationContext()," test de is "+is.toString(),Toast.LENGTH_LONG).show();
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://192.168.10.113:80/client/recupVille.php");
            response = httpClient.execute(httpPost);

            HttpEntity entity = response.getEntity();
            is = entity.getContent();
            Toast.makeText(getApplicationContext()," test de is "+is.toString(),Toast.LENGTH_LONG).show();


        }catch (Exception e){
            Toast.makeText(getApplicationContext(),"Invalid Ip Address "+e.toString(),Toast.LENGTH_LONG).show();
            Toast.makeText(getApplicationContext(),"dans le response "+response.toString(),Toast.LENGTH_LONG).show();

           // e.printStackTrace();

        }
       // Toast.makeText(getApplicationContext()," test de is "+is.toString(),Toast.LENGTH_LONG).show();

        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null) {

                sb.append(line+"\n");
            }
            is.close();
            result=sb.toString();
        }catch (Exception e){
            Toast.makeText(getApplicationContext(),"Invalide file",Toast.LENGTH_LONG).show();
        }
        try{
            JSONArray JA = new JSONArray(result);
            JSONObject json=null;
            ville = new String[JA.length()];
            for(int i=0;i<JA.length();i++){
                json = JA.getJSONObject(i);
                ville[i]=json.getString("ville");
            }
            Toast.makeText(getApplicationContext(),"sss",Toast.LENGTH_LONG).show();
            for(int i=0;i<ville.length;i++){
                list1.add(ville[i]);
            }
            Toast.makeText(getApplicationContext(),"len",Toast.LENGTH_LONG).show();
            spinner_fn();
        }catch (Exception e){
            Log.e("Fail 3 ",e.toString());
        }
    }


}
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
3 400
Hello,

Pour commencer, tu as une mauvaise gestion d'erreur. Dans les blocs
catch
, plutôt que d'afficher des toasts avec des textes à toi, tu devrais au moins logguer les erreurs contenues dans les exceptions
e.getMessage()
. Avec ça, tu (et on) en sauras plus sur l'erreur rencontrée.
Messages postés
10
Date d'inscription
vendredi 12 octobre 2012
Statut
Membre
Dernière intervention
17 mai 2016

Bonjour sa ne fonctionne pas toujours ..... dans mon try du buffere j'ai une exception de type

java.lang.NullPointerException:lock ==null
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
3 400
ça ne fonctionne toujours pas (ce n'était pas le but de la manip') mais maintenant, tu sais d'où vient l'erreur: tu as un objet à null.
Dans ton
onCreate()
, tu fais un
is.toString()
...mais sans initialisé
is
?
Messages postés
10
Date d'inscription
vendredi 12 octobre 2012
Statut
Membre
Dernière intervention
17 mai 2016

si jai initialiser is avec la valeur null
is=null;
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
3 400
Bah ton erreur est là!
On ne peut pas utiliser de méthode sur un objet
null
!
Tu essaies d'accéder à un élément (via
toString()
) d'un objet qui n'existe pas (
null
). Donc ça crash...
Messages postés
10
Date d'inscription
vendredi 12 octobre 2012
Statut
Membre
Dernière intervention
17 mai 2016

que faire alors pour remédier a ce pbs?
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
3 400
Tu supprimes ton 1er Toast, qui ne sert à rien ;)
is est initialisé après, avec l'entity.

Fait un seul bloc try..catch, pour gagner en lisibilité.

Note: vaut mieux privilégier les Logs dans la console plutôt que les toasts...
Messages postés
10
Date d'inscription
vendredi 12 octobre 2012
Statut
Membre
Dernière intervention
17 mai 2016

jai reussi en utilisant une classe async, jai deja un tableau contenant les villes. maintenant je n'arrive pas a remplir dans mon Spinner. voici mon code

la classe ajoutBail.java
package com.example.tantine1.housefindpro;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

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.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Tantine1 on 4/28/2016.
 */
public class ajoutBail extends AppCompatActivity {

    //     définition de la variable de l'id du bayeur
    private String idBayeur;
    private Spinner spin_type, spin_ville;
    //private static final String URLV = "http://192.168.10.113:80/client/recupVille.php";

    private String data;
    List<String> list1 = new ArrayList<String>();
    //declation test
    InputStream is;
    String result = null;
    String line = null;
    HttpResponse response;
    BufferedReader reader;


    Spinner spinner_ville;


    void spinner_fn(String[] ville) {
        Log.i("AjoutBail", ville.toString());
        ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(ajoutBail.this, R.layout.support_simple_spinner_dropdown_item, ville);
        spinner_ville.setAdapter(dataAdapter1);
        spin_ville.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                spin_ville.setSelection(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ajoutbail);

        spinner_ville = (Spinner) findViewById(R.id.spin_ville);

        Toast.makeText(getApplicationContext(), "avant le try dans ajout ", Toast.LENGTH_LONG).show();


          NomDeLaVille nV= (NomDeLaVille) new NomDeLaVille(this).execute((Void[]) null);

        // Toast.makeText(getApplicationContext()," test de is "+is.toString(),Toast.LENGTH_LONG).show();

       /* try{

             reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            Log.e("CA","apres le reader");
            StringBuilder sb = new StringBuilder();
            Toast.makeText(this,"Result : "+result,Toast.LENGTH_LONG).show();
            while ((line = reader.readLine()) != null) {

                sb.append(line+"\n");
            }
            is.close();
           // result=sb.toString();
            if(result == null)
                Log.i("RESULT", "Result == null");
            else
                Log.i("RESULT", "Result n'est pas null, c'est donc un problème sur le PHP");
        }catch (Exception e){
            e.getMessage();
           Log.i("Invalid"," buffered error "+e+" Result : "+line   );
        }
        try{
            JSONArray JA = new JSONArray(result);
            JSONObject json=null;
            ville = new String[JA.length()];
            for(int i=0;i<JA.length();i++){
                json = JA.getJSONObject(i);
                ville[i]=json.getString("nom_ville");
            }
            Toast.makeText(getApplicationContext(),"sss",Toast.LENGTH_LONG).show();
          /*  for(int i=0;i<ville.length;i++){
                list1.add(ville[i]);
            }
            Toast.makeText(getApplicationContext(),"len",Toast.LENGTH_LONG).show();
            spinner_fn();
        }catch (Exception e){
            Log.e("Fail 3 ",e.toString());
        }*/


    }


}


voici la lcasse asynchrone
NomDeLaVille.java
package com.example.tantine1.housefindpro;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

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.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Tantine1 on 5/10/2016.
 */
class NomDeLaVille extends AsyncTask<Void, Void, Boolean>
{
    String[] ville;
    Spinner spin_vill;

    List<String> list1 = new ArrayList<String>();
    JSONObject json = null;

    protected ajoutBail activity ;

    public NomDeLaVille(AppCompatActivity activ)
    {

        this.activity = (ajoutBail) activ;
    }

    @Override
    protected Boolean doInBackground(Void... params)
    {
        //Ton code permettant l'appel à ton webservice ici
        HttpResponse response = null;
        InputStream is = null;
        String result = null;

        //Envoi de la requête HTTP, et réception de la réponse
        try
        {
          //  Log.i("Info","Connetion");
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://192.168.1.2:80/client/recupVille.php");
            response = httpClient.execute(httpPost);

            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }
        catch (Exception e)
        {
            Log.i("CATCH 1","Erreur : " + e.getMessage());
            return false;
        }

        //Conversion en String (au format JSON)
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null)
            {

                sb.append(line+"\n");
            }
            is.close();
            result=sb.toString();
            // Log.i("CATCH 1","Result : "+result.equals("nom_ville"));
        }
        catch (Exception e)
        {
            Log.i("CATCH 2","Erreur : " + e.getMessage());
            return false;
        }

        //Lecture de ton String (format JSON)
        try
        {
            JSONArray JA = new JSONArray(result);

            ville = new String[JA.length()];

            for(int i = 0; i < JA.length(); i++)
            {
                json = JA.getJSONObject(i);

                list1.add(json.getString("nom_ville"));
                ville[i] = json.getString("nom_ville");
                Log.i("Ville ",json.getString("nom_ville"));
            }



            // Toast.makeText(getApplicationContext(),"len",Toast.LENGTH_LONG).show();
            //  spinner_fn();
        }
        catch (Exception e)
        {
            Log.i("CATCH 3","Erreur : " + e.getMessage());
        }

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result)
    {
        if(result)
        {
            Log.i("TAG",ville.toString());
            //Mis à jour de la liste

            activity.spinner_fn(ville);
        }
        else
            Log.i("TAG","Ca ne fonctionnne pas....");
    }



}
Messages postés
15062
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 juin 2021
3 400
Si c'est un autre problème (je n'ai pas lu le code), merci d'ouvrir une nouvelle discussion et de mettre celle-ci en résolu si c'est le cas.