Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Problème Mise en place Webservice

Sujet résolu
    29 juillet 2012 à 15:38:33

    Bonjour,

    aillant déjà trouvé mon bonheur sur ce site, je relance une nouvelle question qui me pose problème...
    J'ai trouvé un site avec un bon tuto sur la mise en place d'un webservice php qui renvoie du Json (sur base d'un bdd) mais le soucis c'est qu'il ne traite pas la question des hébergeurs locaux.
    J'ai créé moi même un VHost sur ma machine qui quand je fais correspondre l'adresse dans mon fichier host à 127.0.0.1 celà fonctionne depuis mon browser (je reçois bien le json).
    Mais comme Android n'en manque pas une pour être amusant, et que celui ci est une machine virtuel Linux (Merci à Androwiid de m'avoir ouvert les yeux ^^), l'adresse local de celui-ci est 10.0.2.2.
    Ce qui est encore plus amusant dans tout ça c'est que quand je fais correspondre mon adresse à 10.0.2.2 bah il récupère rien et mon Json renvoie NULL...

    Alors je recherche désespérément quelqu'un qui a déjà réussi à mettre en place une communication locale entre sa machine virtuel Android et son serveur virtuel (sur sa machine ^^)

    Merci d'avance pour vos réponses ^^
    • Partager sur Facebook
    • Partager sur Twitter
      29 juillet 2012 à 22:33:26

      Salut,

      Je me doutais bien que cela n'allait pas être aussi simple que ça. :) J'aimerais rajouter cette possibilité dans mon tutoriel, je me pencherais donc sur la question sérieusement dès que j'aurais du temps libre devant moi (normalement, demain soir).

      Je retournerais vers toi dès que j'aurais fais quelques tests. En attendant, si tu trouves la solution, n'hésite pas à la communiquer, elle m'intéressera beaucoup.
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        30 juillet 2012 à 10:27:39

        Pour le moment je suis en phase de test, j'ai contacté une entreprise qui proposait un code source et à la base on me disait de trouver un hébergeur gratuit (mais pour des tests c'est pas le bon plan ^^).
        Maintenant je test avec des éléments supplémentaires qu'il m'a donné, un exemple est de ne pas oublier d'autoriser l'accès au web dans le manifest.xml donc si je me souviens bien ça donne ça:

        <uses-permission android:name="android.permission.INTERNET" />
        


        Ensuite il me parle d'utiliser l'adresse du pc (ip config sur win et ifconfig sur linux), c'est un peu chiant vu que moi je passe par un VHost et non par le dossier www donc pour les accès c'est un peu plus chiant (changer à chaque fois l'adresse dans le fichier host).

        Pour le moment tout ça est en phase de test je te tiens au courant si j'arrive à faire fonctionner ^^
        • Partager sur Facebook
        • Partager sur Twitter
          31 juillet 2012 à 10:47:27

          Bon j'ai réussi à faire fonctionner un code.
          En fait je sais pas si il faut nécessairement lier l'adresse ip à un dossier (comme je l'ai fait moi dans mon httpd et host), ou si le fichier www suffit (j'ai pas vraiment essayé).
          Donc en gros il faut utiliser l'adresse ip du pc (198.162.x.x).
          Bon moi ça fonctionnait pas directe mais après redémarrage du pc (normalement relancer les services c'est bon mais moi ça bug).

          Donc en gros moi comment j'ai fait c'est un VHost (lien du fichier sous xampp: C:\xampp\apache\conf)

          <VirtualHost *:80>
                  ServerName test.webservice.com
                  DocumentRoot "G:\School\TFE\tfe\Webservice"
                  <Directory "G:\School\TFE\tfe\Webservice">
                          Options Indexes FollowSymLinks MultiViews
                                  AllowOverride All
                                  Order allow,deny
                                  Allow from all
                  </Directory>
          </VirtualHost>


          Où je spécifie le dossier où se trouve mon fichier php, et ensuite dans le fichier host (pour le modifier faut couper l'antivirus et ouvrir notepad++ en mode admin)
          et on ajoute cette ligne (lien du fichier: C:\Windows\System32\drivers\etc):

          192.168.x.x test.webservice.com


          Ensuite j'ai récupéré un projet sur ce site (qui est fonctionnel):



          Et j'essaye de l'adapter à mon code des listView depuis ce site:



          A partir de ce moment là si tout va bien depuis le navigateur internet de la machine virtuel android en tapant l'adresse ip de votre pc (http://192.168.x.x) logiquement on tombe sur les page php du dossier (si c'est le cas c'est bon le web service est accessible en local)


          Par contre j'ai des questions ^^
          Vu que tu planches sur le sujet, comment tu fait pour rendre cliquable les "items" d'une listView de taille indéterminée (vu que les résultats viennent de la bdd ^^).
          • Partager sur Facebook
          • Partager sur Twitter
            31 juillet 2012 à 11:43:36

            Merci d'avoir partager ta solution. L'utilisation de l'IP 192.168.x.x était donc nécessaire. Tu n'as pas réussi avec 10.0.2.2 ? Je n'ai pas eu le temps de tester hier soir mais j'espère ce soir.

            Concernant ton problème, ça depend de l'architecture que tu as choisi (Fragment ou non) mais dans tous les cas, tu peux "overrider" la méthode suivante si tu utilises ListFragment :

            @Override
            public void onListItemClick(ListView l, View v, int position, long id) {
            	Intent i = new Intent(getActivity(), DetailsFragmentActivity_.class);
            	i.putExtra("fragment", "NewsListFragment");
            	i.putExtra("news", this.mAdapter.getItem(position));
            	getActivity().startActivity(i);
            }
            


            Ou attaché le listener équivalent à ta ListView.

            Cette méthode sera appelé automatiquement lorsque tu cliqueras sur un item de ta liste. :)
            • Partager sur Facebook
            • Partager sur Twitter
            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
              31 juillet 2012 à 12:29:57

              Bah avec l'adresse de mon pc ça fonctionne, le 12.0.2.2 j'ai quand même un doute (par contre faut pas oublier dans le manifest de mettre l'autorisation d'accès à internet).

              Bah si tu te souviens un peu de mon architecture, j'ai mes 3 fragments, dans les 3 j'ai des boutons qui font chacun apparaître un listView.
              Donc en gros ce que je veux faire, c'est récupérer via http un tableau de valeur (qui remplacera le tableau statique que j'ai mis précédemment) et pouvoir cliquer sur chacun des "items" du listView (bon en plus je dois récupérer la valeur du champ pour pouvoir ensuite afficher le bon contenu dans les tableLayout que je ferai par la suite ^^).
              Je sais pas si ça éclairci un peu la question ^^

              Par contre aussi étrange que ça puisse être, j'ai créé une class httpConnect dans lequel il y a une fonction (idéalement je dois aussi créer une variable qui reprend le nom de mes boutons pour appeler la bonne "fonction" de mon webservice ^^
              Je fais comme ça:


              httpConnection connect = new httpConnection();
              


              Mais après c'est bizarre il aime pas trop l'appel de la fonction via ce code:

              connect.mafonction(String returnString);
              
              • Partager sur Facebook
              • Partager sur Twitter
                31 juillet 2012 à 16:09:46

                Bonjour, j'utilise pour ma part un webservice SOAP qui tourne sur mon pc (serveur tomcat), je récupère donc bien le wsdl sur le localhost.
                Je me connecte a mon ws via l'émulateur avec "http://10.0.2.2:8080/xxx" et cela ne me pose pas de problème.

                Citation : vangoeth

                Ce qui est encore plus amusant dans tout ça c'est que quand je fais correspondre mon adresse à 10.0.2.2


                Je ne connais pas bien les vHost mais tu fais correspondre ton fichier host a 10.0.2.2 dans ton test?

                As-tu testé de laisser ton fichier host correspondre au localhost et de tester l'émulateur en 10.0.2.2?

                • Partager sur Facebook
                • Partager sur Twitter
                  31 juillet 2012 à 16:18:36

                  L'adresse localHost ne fonctionne pas sous l'émulateur android (127.0.0.1).
                  Mais là c'est bon pour moi ça fonctionne, mais l'émulateur ne reconnait pas le nom de mon VHost par exemple donc taper monsite.webservice.com (exemple) ça ne fonctionne pas ^^

                  Mais là c'est bon ça a fonctionné. Maintenant reste plus qu'à l'implémenter correctement mais ça devrait pas poser de problème ^^

                  On m'a déconseillé soap, fort lourd et pas facile à prendre en main ^^

                  En fait comme tu peux le voir, dans mon test, j'ai donné un chemin d'accès "test.webservice.com" et ensuite dans mon fichier host je l'ai lié à mon ip locale ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 juillet 2012 à 16:35:14

                    Parfait pour toi alors, désolé de n'avoir pu t'aider réellement (tu n'en avais pas besoin sur ce sujet peut être ^^)
                    SOAP est assez simple d'utilisation sur android via la library ksoap, les seuls problèmes (enfin ceux qui m'ont pris le plus de temps) concercent les ws avec authentification et la récupération des caractères accentués

                    Ok, je pensais que tu l'avais lié a 10.0.2.2 et non a ton ip locale.

                    Bonne chance pour l'implémentation :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 août 2012 à 10:43:14

                      Je relance le sujet parce que j'ai adapté le code au mien et j'ai un retour null (bizarre bizarre).

                      Alors voilà le code sur lequel je me suis basé:
                      package com.exemple.ville;
                      
                      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.apache.http.message.BasicNameValuePair;
                      import org.json.JSONArray;
                      import org.json.JSONException;
                      import org.json.JSONObject;
                      
                      import android.app.Activity;
                      import android.os.Bundle;
                      import android.util.Log;
                      import android.widget.LinearLayout;
                      import android.widget.TextView;
                      
                      public class ville extends Activity {
                      	TextView txt;
                      	@Override
                      	public void onCreate(Bundle savedInstanceState) {
                      		super.onCreate(savedInstanceState);
                      		setContentView(R.layout.main);
                      
                      		LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
                      		txt = new TextView(getApplicationContext());  
                      		rootLayout.addView(txt);  
                      		setContentView(rootLayout);  
                      
                      		// Définir le texte et appeler la fonction de connexion.  
                      		txt.setText("Connexion..."); 
                      		// Appeler la méthode pour récupérer les données JSON
                      		txt.setText(getServerData(strURL)); 
                      	}
                      
                      	// Mettre l'adresse du script PHP
                      	// Attention localhost ou 127.0.0.1 ne fonctionnent pas. Mettre l'adresse IP local.
                      	public static final String strURL = "http://192.168.1.100/ville.php?donnee=getL";
                      
                      	private String getServerData(String returnString) {
                      		InputStream is = null;
                      		String result = "";
                      		// Envoyer la requête au script PHP.
                      		// Script PHP : $sql=mysql_query("select * from tblVille where Nom_ville like '".$_REQUEST['ville']."%'");
                      		// $_REQUEST['ville'] sera remplacé par L dans notre exemple.
                      		// Ce qui veut dire que la requête enverra les villes commençant par la lettre L
                      		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                      		nameValuePairs.add(new BasicNameValuePair("ville","L"));
                      
                      		// Envoie de la commande http
                      		try{
                      			HttpClient httpclient = new DefaultHttpClient();
                      			HttpPost httppost = new HttpPost(strURL);
                      			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                      			HttpResponse response = httpclient.execute(httppost);
                      			HttpEntity entity = response.getEntity();
                      			is = entity.getContent();
                      
                      		}catch(Exception e){
                      			Log.e("log_tag", "Error in http connection " + e.toString());
                      		}
                      
                      		// Convertion de la requête en string
                      		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();
                      			result=sb.toString();
                      		}catch(Exception e){
                      			Log.e("log_tag", "Error converting result " + e.toString());
                      		}
                      		// Parse les données JSON
                      		try{
                      			JSONArray jArray = new JSONArray(result);
                      			for(int i=0;i<jArray.length();i++){
                      				JSONObject json_data = jArray.getJSONObject(i);
                      				// Affichage ID_ville et Nom_ville dans le LogCat
                      				Log.i("log_tag","ID_ville: "+json_data.getInt("ID_ville")+
                      						", Nom_ville: "+json_data.getString("Nom_ville")
                      				);
                      				// Résultats de la requête
                      				returnString += "\n\t" + jArray.getJSONObject(i); 
                      			}
                      		}catch(JSONException e){
                      			Log.e("log_tag", "Error parsing data " + e.toString());
                      		}
                      		return returnString; 
                      	}
                      }
                      


                      Et mon code légèrement modifier (je n'utilise plus un procédure mais une fonction qui me retourne un tableau):
                      package rapport.presse.cim;
                      
                      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.apache.http.message.BasicNameValuePair;
                      import org.json.JSONArray;
                      import org.json.JSONException;
                      import org.json.JSONObject;
                      
                      import android.util.Log;
                      
                      public class httpConnexion {
                      	
                      	@SuppressWarnings("null")
                      	public static String[] getServerData(){
                      	String result = "";
                      	InputStream is = null;
                      	ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                      	nameValuePairs.add(new BasicNameValuePair("ville","L"));
                      	String[] data = null;
                      	//ArrayList<String> data = new ArrayList<String>();
                      	
                      /**===============================================
                      				Envoie de la requête HTTP
                      ===============================================**/ 
                      		try{
                      			HttpClient httpclient = new DefaultHttpClient();
                      			HttpPost httppost = new HttpPost("http://192.168.1.100/ville.php?donnee=getL");
                      			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                      			HttpResponse response = httpclient.execute(httppost);
                      			HttpEntity entity = response.getEntity();
                      			is = entity.getContent();
                      		}
                      		catch(Exception e){
                      			Log.e("log_tag", "Error in http connection " + e.toString());
                      		}
                      /**===============================================
                      					End
                      ===============================================**/ 
                      		
                      /**===============================================
                      		Conversion de la requête en string
                      ===============================================**/ 
                      		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();
                      			result=sb.toString();
                      		}catch(Exception e){
                      			Log.e("log_tag", "Error converting result " + e.toString());
                      		}
                      		
                      /**===============================================
                      					End
                      ===============================================**/ 
                      
                      /**===============================================
                      		On parse les données Json
                      ===============================================**/
                      		try{
                      			JSONArray jArray = new JSONArray(result);
                      			for(int i=0;i<jArray.length();i++){
                      				JSONObject json_data = jArray.getJSONObject(i);
                      				data[i]= json_data.getString("Nom_ville");
                      				// Affichage ID_ville et Nom_ville dans le LogCat
                      				Log.i("log_tag",json_data.getString("Nom_ville")
                      				);
                      				// Résultats de la requête
                      			}
                      		}catch(JSONException e){
                      			Log.e("log_tag", "Error parsing data " + e.toString());
                      		}
                      		
                      /**===============================================
                      					End
                      ===============================================**/
                      		return data;
                      	}	
                      }
                      


                      Et j'appel ensuite ma fonction dans ma class concernée de cette manière:
                      httpConnexion connexion = new httpConnexion();
                          	String[] tabRevues = connexion.getServerData();
                      


                      Et le logCat(je flash ou il aime pas trop la manière dont je lui propose le tableau, à la base c'était un tableau que j'avais créé moi même avec des valeurs):

                      08-02 08:39:38.869: E/AndroidRuntime(761): FATAL EXCEPTION: main
                      08-02 08:39:38.869: E/AndroidRuntime(761): java.lang.NullPointerException
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at java.util.Arrays$ArrayList.<init>(Arrays.java:38)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at java.util.Arrays.asList(Arrays.java:154)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at rapport.presse.cim.first.onCreateView(first.java:50)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.view.ViewPager.populate(ViewPager.java:804)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.View.measure(View.java:12723)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.View.measure(View.java:12723)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.View.measure(View.java:12723)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.View.measure(View.java:12723)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.os.Handler.dispatchMessage(Handler.java:99)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.os.Looper.loop(Looper.java:137)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at android.app.ActivityThread.main(ActivityThread.java:4424)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at java.lang.reflect.Method.invokeNative(Native Method)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at java.lang.reflect.Method.invoke(Method.java:511)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
                      08-02 08:39:38.869: E/AndroidRuntime(761):         at dalvik.system.NativeStart.main(Native Method)


                      Voilà si quelqu'un trouve la raison ça serait cool ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 août 2012 à 13:46:30

                        Salut,

                        Je n'ai pas le temps de regarder en détail mais je vois cette annotation sur ta méthode @SuppressWarnings("null"), pourquoi ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                          2 août 2012 à 14:08:08

                          Bah c'était un conseil que me donnait eclipse ^^
                          C'est peut-être le fait d'avoir déclarer le tableau avec une valeur null qui pose problème :s
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 août 2012 à 14:44:39

                            Ah oui, carrément. Tu dois mettre : new String[TAILLE]. Mais :
                            • Pourquoi pas utiliser un ArrayList ?
                            • Il te proposait de mettre cette annotation à cause de data ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                              2 août 2012 à 14:52:34

                              Ouais en fait je veux faire un simple tableau qui récupère les valeurs et puis dans mon activité principale récupérer le tableau pour afficher dans ma liste (que je fais apparaître).
                              En fait je veux juste rendre dynamique ce que j'avais en statique avant :p
                              J'ai quand même un retour null sur la requête http, c'est bizarre pourtant j'ai mi ce qu'il fallait pour que ça colle avec le fichier php
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 août 2012 à 20:30:42

                                Je pourrais voir ta classe first ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                  2 août 2012 à 21:09:55

                                  Je t'ai mi l'ancien tableau entre commentaires


                                  package rapport.presse.cim;
                                  
                                  import java.util.ArrayList;
                                  
                                  import android.os.Bundle;
                                  import android.support.v4.app.Fragment;
                                  import android.view.LayoutInflater;
                                  import android.view.View;
                                  import android.view.View.OnClickListener;
                                  import android.view.ViewGroup;
                                  import android.widget.ArrayAdapter;
                                  import android.widget.Button;
                                  import android.widget.ListView;
                                  
                                  
                                  public class first extends Fragment {
                                  	
                                  	/**private String[] tabRevues = {
                                              "AAAAAAAA", "BBBBBBBB", "CCCCCCCC", "DDDDDDDD", "EEEEEEEE"
                                  	};**/
                                  	
                                  	private ListView mListViewAll;
                                  	private ListView mListViewQuot;
                                  	private ListView mListViewHebd;
                                  	private ListView mListViewMens;
                                  	private ListView mListVieuwTrim;
                                  	private ListView mListViewAnn;
                                  	Button mButton1;
                                  	Button mButton2;
                                  	Button mButton3;
                                  	Button mButton4;
                                  	Button mButton5;
                                  	Button mButton6;
                                  	
                                  	public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                              Bundle savedInstanceState) {
                                          View v= inflater.inflate(R.layout.first, container, false);
                                          
                                          httpConnexion connexion = new httpConnexion();
                                      	String[] tabRevues = connexion.getServerData();
                                          
                                  /**===============================================
                                  		Gestion des listView
                                  ===============================================**/  
                                        /** 1.Récupération du ListView
                                         *  2. Cacher la ListView
                                         *  3.Création de l'adapter
                                         *  4.On passe nos données au composant ListView**/
                                          
                                          this.mListViewAll = (ListView) v.findViewById(R.id.ListViewAll);
                                          mListViewAll.setVisibility(View.GONE);    
                                  		ArrayAdapter<String> mTabAll = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
                                  		this.mListViewAll.setAdapter(mTabAll);
                                  		
                                  		this.mListViewQuot = (ListView) v.findViewById(R.id.ListViewQuot);
                                          mListViewQuot.setVisibility(View.GONE);
                                  		ArrayAdapter<String> mTabQuot = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
                                  		this.mListViewQuot.setAdapter(mTabQuot);
                                  		
                                  		this.mListViewHebd = (ListView) v.findViewById(R.id.ListViewHebd);
                                          mListViewHebd.setVisibility(View.GONE);
                                  		ArrayAdapter<String> mTabHebd = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
                                  		this.mListViewHebd.setAdapter(mTabHebd);
                                  		
                                  		this.mListViewMens = (ListView) v.findViewById(R.id.ListViewMens);
                                  		mListViewMens.setVisibility(View.GONE);
                                  		ArrayAdapter<String> mTabMens = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
                                  		this.mListViewMens.setAdapter(mTabMens);
                                  		
                                  		this.mListVieuwTrim = (ListView) v.findViewById(R.id.ListViewTrim);
                                  		mListVieuwTrim.setVisibility(View.GONE);
                                  		ArrayAdapter<String> mTabTrim = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
                                  		this.mListVieuwTrim.setAdapter(mTabTrim);
                                  		
                                  		this.mListViewAnn = (ListView) v.findViewById(R.id.ListViewAnn);
                                  		mListViewAnn.setVisibility(View.GONE);
                                  		ArrayAdapter<String> mTabAnn = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, tabRevues);
                                  		this.mListViewAnn.setAdapter(mTabAnn);
                                  		
                                  		
                                  /**End**/
                                  
                                  /**===============================================
                                  		Gestion des cliques
                                  ===============================================**/  
                                  		//récupération des Boutons
                                  		mButton1 = (Button) v.findViewById(R.id.all);
                                  		mButton2= (Button) v.findViewById(R.id.quot);
                                  		mButton3 = (Button)v.findViewById(R.id.hebd);
                                  		mButton4 = (Button)v.findViewById(R.id.mens);
                                  		mButton5 = (Button)v.findViewById(R.id.trim);
                                  		mButton6 = (Button)v.findViewById(R.id.ann);
                                  		
                                  		//Test action sur le bouton + visibilité du ListView
                                  		mButton1.setOnClickListener (new View.OnClickListener() {
                                  			
                                  			public void onClick(View v) {
                                  				// TODO Auto-generated method stub
                                  				if(mListViewAll.isShown()){
                                  					mListViewAll.setVisibility(View.GONE);
                                  				}
                                  				else{
                                  					mListViewAll.setVisibility(View.VISIBLE);
                                  				}
                                  			}
                                  		});
                                  		
                                  		mButton2.setOnClickListener(new View.OnClickListener() {
                                  			
                                  			public void onClick(View v) {
                                  				// TODO Auto-generated method stub
                                  				if(mListViewQuot.isShown()){
                                  					mListViewQuot.setVisibility(View.GONE);
                                  				}
                                  				else{
                                  					mListViewQuot.setVisibility(View.VISIBLE);
                                  				}
                                  			}
                                  		});
                                  		
                                  		mButton3.setOnClickListener(new View.OnClickListener() {
                                  			
                                  			public void onClick(View v) {
                                  				// TODO Auto-generated method stub
                                  				if(mListViewHebd.isShown()){
                                  					mListViewHebd.setVisibility(View.GONE);
                                  				}
                                  				else{
                                  					mListViewHebd.setVisibility(View.VISIBLE);
                                  				}
                                  			}
                                  		});
                                  		
                                  		mButton4.setOnClickListener(new View.OnClickListener() {
                                  			
                                  			public void onClick(View v) {
                                  				// TODO Auto-generated method stub
                                  				if(mListViewMens.isShown()){
                                  					mListViewMens.setVisibility(View.GONE);
                                  				}
                                  				else{
                                  					mListViewMens.setVisibility(View.VISIBLE);
                                  				}
                                  			}
                                  		});
                                  		
                                  		mButton5.setOnClickListener(new View.OnClickListener() {
                                  			
                                  			public void onClick(View v) {
                                  				// TODO Auto-generated method stub
                                  				if(mListVieuwTrim.isShown()){
                                  					mListVieuwTrim.setVisibility(View.GONE);
                                  				}
                                  				else{
                                  					mListVieuwTrim.setVisibility(View.VISIBLE);
                                  				}
                                  			}
                                  		});
                                  		
                                  		mButton6.setOnClickListener(new View.OnClickListener() {
                                  			
                                  			public void onClick(View v) {
                                  				// TODO Auto-generated method stub
                                  				if(mListViewAnn.isShown()){
                                  					mListViewAnn.setVisibility(View.GONE);
                                  				}
                                  				else{
                                  					mListViewAnn.setVisibility(View.VISIBLE);
                                  				}
                                  			}
                                  		});
                                  		
                                  /**End**/
                                          return v;
                                          
                                  	}
                                  }
                                  
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 août 2012 à 9:26:40

                                    Le problème vient du fait que ta méthode public static String[] getServerData() te renvoie un objet null. Du coup, lorsque tu tentes d'attacher cette liste d'item à ton adaptateur, il crash et te lance une NullPointException.

                                    Cependant, si tu as bien changé String[] data = null; en String[] data = new String[TAILLE];, tu ne devrais plus avoir la même erreur que ce que tu m'as donné plus bas.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                      3 août 2012 à 10:04:19

                                      Le soucis c'est que je ne connais pas la taille de mon tableau vu que ça vient d'une base de donnée dont la taille est indéterminée :p
                                      Ou bien tu vas me dire que "TAILLE" est une valeur reconnue par java :p
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 août 2012 à 10:19:44

                                        Non, mais du coup tu as deux choix :
                                        • Soit tu crées une méthode que tu tests à chaque ajout pour voir si tu as encore de la place dans ton tableau et te l'agrandit si tu en as plus.
                                        • Soit tu utilises des ArrayLists qui gère un tableau variable pour toi.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                          3 août 2012 à 10:22:06

                                          Et genre une arrayList je peux ensuite faire une truc du style privat String[] tabrevue = data
                                          data étant un arrayList?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 août 2012 à 10:24:26

                                            Tu as des méthodes comme toArray() sur un ArrayList pour récupérer l'ensemble des objets contenu dans ta liste. :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                              3 août 2012 à 10:28:51

                                              Ha ok, parce que là en fait ce que j'ai fait j'ai changé ma méthode en arrayList, puis j'ai fait un data.add(les valeurs).
                                              Dans ma class First j'ai fait un private ArrayList<String> tabRevues = connexion.getServerData();
                                              Là je n'ai plus d'erreur et mon app se lance mais apparemment je ne récupère pas de valeurs

                                              J'ai de nouveau ces 3 lignes -_-

                                              08-03 08:24:42.626: E/log_tag(595): Error in http connection android.os.NetworkOnMainThreadException
                                              08-03 08:24:42.626: E/log_tag(595): Error converting result java.lang.NullPointerException
                                              08-03 08:24:42.635: E/log_tag(595): Error parsing data org.json.JSONException: End of input at character 0 of
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 août 2012 à 10:32:57

                                                Ta connexion Wifi est lancée sur ton device (ou émulateur) ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                                  3 août 2012 à 10:35:48

                                                  Bah je suppose vu que depuis le browser de l'émulateur j'ai accès à l'adresse ip de mon webservice et je peux voir la page contenant mes scipts :s

                                                  (ça va être simple je ne sais plus tester sur du physique j'ai dû ramener mon s2 en réparation pour le même problème qu'il y a 4 mois -_-)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 août 2012 à 10:40:41

                                                    Ah oui, je suis bête (je n'ai pas lu l'erreur). Tu es obligé d'exécuter tes requêtes dans un thread secondaire. :)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                                      3 août 2012 à 10:42:19

                                                      Haha tu sais m'expliquer :p
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        3 août 2012 à 10:49:56

                                                        "C'est très simple" :-° En gros, ton application se lance dans ce qu'on appel l'UIThread. Ce thread principal exécute tout ton code l'un à la suite de l'autre et il est le seul à pouvoir toucher à l'affichage de ton application (changer le texte d'un TextView peut être édité seulement dans ce thread par exemple).

                                                        Toutes les requêtes qui durent un certain temps doivent se faire dans un thread secondaire pour ne pas bloquer l'utilisateur. Imagine, si tu lances ta requête HTTP dans l'UIThread. Il va exécuter ta requête et il ne va pas continuer tant qu'il n'aura pas reçu la réponse de la requête. Pour peu que tu ais une connexion un peu lente, ton application va freezer.

                                                        Il y a plusieurs moyen de lancer des threads secondaires. Je te conseil personnellement les requêtes asynchrones. Tu pourras retrouver un tuto à ce sujet via le lien suivant.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                                          3 août 2012 à 10:52:12

                                                          En gros je dois aussi m'amuser à faire une petite bar de chargement? ^^
                                                          Ce qui est quand même bizarre c'est que dans le lien que je t'ai filé j'ai pas l'impression que c'est en asynchrone ^^
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            3 août 2012 à 10:53:14

                                                            Non, la barre de chargement n'est pas obligatoire. Il explique simplement comment te permettre d'en afficher une.

                                                            Le lien que tu m'as filé ?
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
                                                              3 août 2012 à 10:56:49

                                                              Ouais pour le tuto (je l'avais mi en "secret" il me semble)
                                                              Là tout se charge correctement sur l'écran sans asynchrone (mais bon je suppose que c'est quand même conseillé de fonctionner comme ça ^^).

                                                              Le lien
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Android] Problème Mise en place Webservice

                                                              × 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