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

Composants graphiques Android Discussion :

Afficher une BDD MySQL dans un ListView


Sujet :

Composants graphiques Android

  1. #1
    Invité
    Invité(e)
    Par défaut Afficher une BDD MySQL dans un ListView
    Tout est dans le titre je crois,
    voici mon code, mais cela provoque une fermeture forcée :
    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
    public class BDDAlarm extends Activity implements AlarmeAdapterListener{
        /** Called when the activity is first created. */
        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);    
            txt.setText(getServerData(strURL));  
     
            ArrayList<BDDAlarm> listA = new ArrayList<BDDAlarm>();
            AlarmeAdapter adapter = new AlarmeAdapter(this, listA);
            adapter.addListener(this); 
            ListView list = (ListView)findViewById(R.id.listalarm);
            list.setAdapter(adapter);
        }  
       public static final String strURL = "http://10.0.2.2:8080/mesRequestes/Alarm.php";      
       private String getServerData(String returnString) {  
           InputStream is = null;  
           String result = "";  
           ArrayList<NameValuePair> listAlr = new ArrayList<NameValuePair>(); 
           listAlr.add(new BasicNameValuePair("alarm",""));  
           try{  
               HttpClient httpclient = new DefaultHttpClient();
    //           HttpResponse response = httpclient.execute(new HttpGet(strURL));
               HttpPost httppost = new HttpPost(strURL);  
               httppost.setEntity(new UrlEncodedFormEntity(listAlr));  
               HttpResponse response = httpclient.execute(httppost);    
               is = response.getEntity().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));  
           	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();  
               Log.i("result", result);
           }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_ALARM: "+json_data.getInt("ID_ALARM")+  
                           ", ID_OBJECT: "+json_data.getInt("ID_OBJECT"));  
                   // 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;   
       }  
    }
    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
    public class AlarmeAdapter extends BaseAdapter{
     
    	private List<BDDAlarm> mListA;
    	public Context mContext;
    	private LayoutInflater mInflater;
     
    	public AlarmeAdapter(BDDAlarm bddAlarm, ArrayList<BDDAlarm> listA) {
    		  mContext = bddAlarm;
    		  mListA = listA;
    	}
     
    	public void addListener(BDDAlarm bddAlarm) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public int getCount() {
    		  return mListA.size();
    	}
     
    	@Override
    	public Object getItem(int position) {
    		return mListA.get(position);
    	}
     
    	@Override
    	public long getItemId(int position) {
    		return position;
    	}
     
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    		  LinearLayout layoutItem;
    		  if (convertView == null) {
    		    layoutItem = (LinearLayout) mInflater.inflate(R.layout.listitem, parent, false);
    		  } 
    		  else 
    		  {
    		  	layoutItem = (LinearLayout) convertView;
    		  }      
    		  TextView alarm = (TextView)layoutItem.findViewById(R.id.text);
     
    		  layoutItem.setTag(position);
     
    		  return layoutItem;
    	}
     
        private ArrayList<AlarmeAdapterListener> myListListener = new ArrayList<AlarmeAdapterListener>();
        public void addListener(AlarmeAdapterListener aListener) 
        {
        	myListListener.add(aListener);
        }
    	public interface AlarmeAdapterListener 
    	{
      	  //TODO
    	}
     
    }
    Avant de rajouter le classe AlarmeAdapter, j'arrivais à afficher mes données dans l'émulateur. Mais le but c'est qu'elles soient dans des listview.
    Quelqu'un pour m'aider?
    Dernière modification par Invité ; 14/06/2011 à 15h58.

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Comme d'hab, pouvez vous poster vos erreurs logcat ici (au moins les exceptions) ?
    Avec le debugueur, votre code plante où ? les variables sont dans quels états (contenus) ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    ---EDIT---
    voici le logcat :
    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
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029): FATAL EXCEPTION: main
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.julie/com.julie.BDDAlarm}: java.lang.NullPointerException
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.os.Looper.loop(Looper.java:123)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at dalvik.system.NativeStart.main(Native Method)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029): Caused by: java.lang.NullPointerException
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at com.julie.BDDAlarm.onCreate(BDDAlarm.java:49)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    06-14 12:55:02.195: ERROR/AndroidRuntime(1029):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    Donc la ligne concernée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.setAdapter(adapter);

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Et en utilisant le debugueur, pourrait tu vérifier l'état de ta variable list ?
    Est-elle "null" ou pas ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Non elle n'est pas vide, dans le logcat j'affiche bien ma bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    06-14 13:00:52.174: INFO/log_tag(1085): ID_ALARM: 1, ID_OBJECT: 1
    06-14 13:00:52.174: INFO/log_tag(1085): ID_ALARM: 2, ID_OBJECT: 1
    06-14 13:00:52.184: INFO/log_tag(1085): ID_ALARM: 3, ID_OBJECT: 2
    --EDIT--
    Enfin une partie mais c'est ce que je demande dans mon code.

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    En fait il parlait de la variable list
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListView list = (ListView)findViewById(R.id.listalarm);
    Est ce qu'elle est null ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Log.i("tag list", list.tostring);
    juste aprés ma déclaration de list, mais ça ne m'affiche rien dans le logcat, ça veut dire qu'elle est vide?

  8. #8
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Le plus simple c'est de mettre un point d'arret juste après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListView list = (ListView)findViewById(R.id.listalarm);
    Tu lance en mode debug et tu regarde si list est égale à null.

  9. #9
    Invité
    Invité(e)
    Par défaut
    listA à une taille de 0 dans le debugger, par contre je ne trouve pas la variable list :s

  10. #10
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Euu il me semble que c'est normal vu qu'à aucun moment tu fait un add ou tu lui affecte une autre liste...

  11. #11
    Invité
    Invité(e)
    Par défaut
    ben je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            ArrayList<BDDAlarm> listA = new ArrayList<BDDAlarm>();
            AlarmeAdapter adapter = new AlarmeAdapter(this, listA);
            adapter.addListener(this); 
            ListView list = (ListView)findViewById(R.id.listalarm);
            list.setAdapter(adapter);
    que faut-il rajouter?

  12. #12
    Invité
    Invité(e)
    Par défaut
    en fait ce que j'affiche dans mon textview je l'affiche à partir de mon adapter non? donc il faudrait que j'aille "questionner" ma bdd depuis l'adapter?

    dans mon code de ma classe adapter j'ai :
    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
    	public View getView(int position, View convertView, ViewGroup parent) {
    		  LinearLayout layoutItem;
    		  if (convertView == null) {
    		    layoutItem = (LinearLayout) mInflater.inflate(R.layout.listitem, parent, false);
    		  } 
    		  else 
    		  {
    		  	layoutItem = (LinearLayout) convertView;
    		  }      
    		  TextView alarm = (TextView)layoutItem.findViewById(R.id.text);
     
    		  layoutItem.setTag(position);
     
    		  return layoutItem;
    	}
    Mais je ne met rien dans la variable alarm, hors c'est dans cette variable que je veux mettre chaque item de ma bdd

  13. #13
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    Pour ton premier des deux post, en faite le problème de ton null pointer exception viens de la je pense.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ArrayList<BDDAlarm> listA = new ArrayList<BDDAlarm>();
    AlarmeAdapter adapter = new AlarmeAdapter(this, listA);
    Tu dis que tu crée une listA qui contiendra des BDDAlarm, après tu veux crée un adapter dans lequel tu met ta listA mais elle ne contient toujours pas de BDDAlarm... du coup elle est pas instancier donc null...

    Et pour ton deuxième post j'ai pas vraiment compris

  14. #14
    Invité
    Invité(e)
    Par défaut
    oui c'était pas trés clair :s

    Mais en fait je ne suis pas sure d'utiliser la bonne méthode pour afficher ma bdd dans une listview. Faut-il vraiment passer par un adapter?
    si oui, alors les BDDAlarm que j'ajoute normalement dans ma listA devrait provenir de ma bdd, mais à aucun moment je ne les récupére pour les mettre dans cette listA ... et je ne sais pas comment faire

  15. #15
    Membre confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    Par défaut
    quand tu fais appel à Alarms.php tu récupère quoi? des objets de types BDDAlarms?

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    En fait ta listView est null car tu changes le root de ton layout principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    setContentView(R.layout.main);
    LinearLayout rootLayout = new LinearLayout(getApplicationContext()); 
    txt = new TextView(getApplicationContext());    
    rootLayout.addView(txt);    
    setContentView(rootLayout);
    Tu as 2 setContentView.
    Donc quand tu fais ton findViewById il trouve pas la ListView qui était dans le premier...

    Ensuite change ta méthode getServerData pour qu'elle renvoie une liste d'objet, dans ton cas j'ai l'impression que tu parses un JSON, donc tu peux faire ça par exemple :
    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
     
    private List<Map<String,Object>> getServerData(String strURL) {
    	   List<Map<String,Object>> res = new ArrayList<Map<String,Object>>();
           InputStream is = null;  
           String result = "";  
           ArrayList<NameValuePair> listAlr = new ArrayList<NameValuePair>(); 
           listAlr.add(new BasicNameValuePair("alarm",""));  
           try{  
               HttpClient httpclient = new DefaultHttpClient();
    //           HttpResponse response = httpclient.execute(new HttpGet(strURL));
               HttpPost httppost = new HttpPost(strURL);  
               httppost.setEntity(new UrlEncodedFormEntity(listAlr));  
               HttpResponse response = httpclient.execute(httppost);    
               is = response.getEntity().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));  
           	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();  
               Log.i("result", result);
           }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);  
     
    			  Map<String,Object> map = new HashMap<String,Object>();
    			  map.put("ID_ALARM",json_data.getInt("ID_ALARM"));
    			  map.put("ID_OBJECT",json_data.getInt("ID_OBJECT"));
     
    			  res.add(map);
     
                  // Affichage ID_ville et Nom_ville dans le LogCat  
                   Log.i("log_tag","ID_ALARM: "+json_data.getInt("ID_ALARM")+  
                           ", ID_OBJECT: "+json_data.getInt("ID_OBJECT"));
               }  
           }catch(JSONException e){  
               Log.e("log_tag", "Error parsing data " + e.toString());  
          }  
          return res;   
       }
    On renvoie une liste de map, celle-ci contient 2 valeurs, un id alarm et un id object.

    Ensuite pour la listView utilise un SimpleAdapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            List<Map<String,Object> res = getServerData(strURL));  
     
            ListView list = (ListView)findViewById(R.id.listalarm);
            list.setAdapter(new SimpleAdapter(this,res,new String[] { "ID_ALARM","ID_OBJECT" },R.layout.listitem, new int[] { R.id.idAlarmTextView, R.id.idObjectTextView}}));
        }
    En gros on lui dit comment prendre les données dans la map et qu'elle vue remplir dans les items de la listview. Les R.id.idAlarmTextView, R.id.idObjectTextView doivent se retrouver au niveau du xml qui représente un item de la listView qui est chez toi dans R.layout.listitem.

    Bon sinon maintenant tu rajoutes un petit AsyncTask à la place de ton code :
    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
     
    public class BDDAlarm extends Activity {
     
    public static final String strURL = "http://10.0.2.2:8080/mesRequestes/Alarm.php";
     
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    new AsyncTask<Void,Void,List<Map<String,Object>>>() {
     
    protected List<Map<String,Object>> doInBackground(Void... rien) {
             List<Map<String,Object>> res = new ArrayList<Map<String,Object>>();
           InputStream is = null;  
           String result = "";  
           ArrayList<NameValuePair> listAlr = new ArrayList<NameValuePair>(); 
           listAlr.add(new BasicNameValuePair("alarm",""));  
           try{  
               HttpClient httpclient = new DefaultHttpClient();
    //           HttpResponse response = httpclient.execute(new HttpGet(strURL));
               HttpPost httppost = new HttpPost(strURL);  
               httppost.setEntity(new UrlEncodedFormEntity(listAlr));  
               HttpResponse response = httpclient.execute(httppost);    
               is = response.getEntity().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));  
           	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();  
               Log.i("result", result);
           }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);  
     
    			  Map<String,Object> map = new HashMap<String,Object>();
    			  map.put("ID_ALARM",json_data.getInt("ID_ALARM"));
    			  map.put("ID_OBJECT",json_data.getInt("ID_OBJECT"));
     
    			  res.add(map);
     
                  // Affichage ID_ville et Nom_ville dans le LogCat  
                   Log.i("log_tag","ID_ALARM: "+json_data.getInt("ID_ALARM")+  
                           ", ID_OBJECT: "+json_data.getInt("ID_OBJECT"));
               }  
           }catch(JSONException e){  
               Log.e("log_tag", "Error parsing data " + e.toString());  
          }  
          return res;
         }
     
    	 protected void onPostExecute(Long result) {
            ListView list = (ListView)findViewById(R.id.listalarm);
            list.setAdapter(new SimpleAdapter(this,res,new String[] { "ID_ALARM","ID_OBJECT" },new int[] { R.id.idAlarmTextView, R.id.idObjectTextView}}));
         }
     
    }.execute();
    }
    }
    Bon j'ai rien testé mais l'idée est là.

  17. #17
    Invité
    Invité(e)
    Par défaut
    J'ai essayé de faire ce que tu me conseil, j'ai d'abord chercher des infos sur asynctask ( lien : http://davy-leggieri.developpez.com/...oid/ui-thread/ bien expliqué) et je pense avoir compris globalement le fonctionnement, cependant dans mon code j'ai une erreur sur le doInBackgroung et le onPostExecute et je n'ai pas trouvé beaucoup d'example sur le net pour comprendre mon erreur.

    Je ne suis pas sur de ce qu'il faut mettre à l'intérieur du doInBackground.

    Voici mon code complet :
    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
    public class BDDAlarm extends Activity{
        /** Called when the activity is first created. */
    	 public static final String strURL = "http://10.0.2.2:8080/mesRequestes/Alarm.php";    
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            new AsyncTask<Void,Void,List<Map<String,Object>>>()
            {
                protected List<Map<String,Object>> doInBackgroung(Void...voids )
                {
                    List<Map<String,Object>> getServerData(String strURL)
                    { 
                 	   List<Map<String, Object>>  res = new ArrayList<Map<String, Object>>();
                        InputStream is = null;  
                        String result = "";  
                        ArrayList<NameValuePair> listAlr = new ArrayList<NameValuePair>();  
                        listAlr.add(new BasicNameValuePair("alarm",""));  
                        try{  
                            HttpClient httpclient = new DefaultHttpClient();
                            HttpPost httppost = new HttpPost(strURL);  
                            httppost.setEntity(new UrlEncodedFormEntity(listAlr));  
                            HttpResponse response = httpclient.execute(httppost);    
                            is = response.getEntity().getContent(); 
     
                        }catch(Exception e)
                        {  
                            Log.e("log_tag", "Error in http connection " + e.toString());  
                        }  
     
                        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();  
                            Log.i("result", result);
                        }catch(Exception e)
                        {  
                            Log.e("log_tag", "Error converting result " + e.toString());  
                        }   
                        try{  
                           JSONArray jArray = new JSONArray(result);  
                            for(int i=0;i<jArray.length();i++)
                            {  
                               JSONObject json_data = jArray.getJSONObject(i);  
     
                               		Map<String, Object> map = new HashMap<String, Object>();
                               		map.put("ID_ALARM", json_data.getInt("ID_ALARM"));
                               		map.put("ID_OBJECT", json_data.getInt("ID_OBJECT"));
                               		res.add(map); 
                                Log.i("log_tag","ID_ALARM: "+json_data.getInt("ID_ALARM")+  
                                        ", ID_OBJECT: "+json_data.getInt("ID_OBJECT"));  
                            }  
                        }catch(JSONException e)
                        {  
                            Log.e("log_tag", "Error parsing data " + e.toString());  
                        }  
                       return res;   
                    }  
            protected void onPostExecute(Long result)
            {
            	ListView list = (ListView)findViewById(R.id.listalarm);
            	list.setAdapter(new SimpleAdapter(this, res, R.layout.listitem,new String[]{"ID_ALARM","ID_OBJECT" }, new int[] { R.id.idAlarmTextView,R.id.idObjectTextView }));
            }  
          }    
       }.execute();  
    }
    }
    Et voici les lignes où j'ai des erreurs, c'est toujours la même "Syntax error on token "(", ; expected" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Map<String,Object>> getServerData(String strURL)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected void onPostExecute(Long result)
    Je me suis dit que ça venait surement du fait qu'il manquait un { ou qu'il y en avait un en trop, mais j'ai vérifié et ça me semble bon :s

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par malgache Voir le message
    quand tu fais appel à Alarms.php tu récupère quoi? des objets de types BDDAlarms?
    ça me récupére tous les objets que j'ai créé dans ma bdd

  19. #19
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    Avant d'optimiser ton application, es-tu certain(e) que ton code est déjà fonctionnelle ?
    1 - Ton serveur PHP quand tu l'interroge renvoi bien une flux GSON ? (testé via un navigateur)
    2 - Ton application arrive bien à communiquer avec ton serveur (pas d'erreur de type 404 & cie)
    3 - Ton application récupère bien un flux GSON lorsqu'il communique avec ton serveur
    4 - Tu arrives bien à initialiser un adapter à partir de tes données.
    5 - Tu arrives bien à afficher ta liste avec tes items (issu de ton adapter).
    6 - Tu veux optimiser les temps de chargement

    Là tu as l'air de t'attaquer à l'étape 6, es-tu sûr que toutes les étapes précédentes fonctionnent ?

  20. #20
    Invité
    Invité(e)
    Par défaut
    Avant d'optimiser ton application, es-tu certain(e) que ton code est déjà fonctionnelle ?
    1 - Ton serveur PHP quand tu l'interroge renvoi bien une flux GSON ? (testé via un navigateur)
    2 - Ton application arrive bien à communiquer avec ton serveur (pas d'erreur de type 404 & cie)
    3 - Ton application récupère bien un flux GSON lorsqu'il communique avec ton serveur
    4 - Tu arrives bien à initialiser un adapter à partir de tes données.
    5 - Tu arrives bien à afficher ta liste avec tes items (issu de ton adapter).
    6 - Tu veux optimiser les temps de chargement
    J'ai testé mon fichier alarm.php sur mon navigateur et il n'y a aucune erreur
    Avant que j'essai d'afficher mes résultat dans une arraylist mon appli communiquer bien avec le serveur (j'afficher les données dans l'émulateur)
    Et je pense que j'en suis au point 5 plutot qu'au point 6, mon but étant d'afficher ma liste avec mes items ce que je n'arrive pas à faire.

    protected void onPostExecute(Long result)
    Je n'ai plus d'erreur sur cette ligne, mais toujours sur l'autre, je pense que je n'ai pas complétement compris comment utiliser le doInBackground et que l'erreur vient pt de là :s
    Dernière modification par Invité ; 15/06/2011 à 11h14.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Aide pour afficher une valeur dans une BDD MysQl
    Par cybermembre dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/11/2012, 21h14
  2. Affichage des données d'une table MySQL dans un ListView selon l'id
    Par loviso dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 30/07/2012, 17h28
  3. [Débutant] afficher une table d'une BDD MySql dans un combobox multicolonnes
    Par vbcasio dans le forum VB.NET
    Réponses: 4
    Dernier message: 24/06/2011, 12h32
  4. [Listview] Remplissage à partir d'une bdd mysql
    Par Cybher dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/07/2005, 10h32
  5. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 12h33

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