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 :

Problème d'affichage de donnée d'une ArrayList dans une ListView


Sujet :

Composants graphiques Android

  1. #21
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par eristoff72
    Du coup, j'ai un problème que je n'arrive pas à résoudre, cette class:
    Conseil : lorsque tu dis que tu as un problème, il est chaudement et vivement recommandé de le décrire
    La, tu dis que t'as un souci avec un prototype de méthode. Ben... sans vouloir être méchant, ça nous fait une belle jambe ^^'
    On ne peut pas t'aider sans détail.

    Quant au générateur d'Hephaistos007, ouaip, il fonctionne et est valide.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  2. #22
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    D'accord.
    Et pour les paramètres que j'ai passé dans la fonction "doInBackground(String datasetid, String recordid, String fields, String periode_ouverture, String nom_du_musee)", j'ai essayé tant bien que mal, mais j'ai fait de la m.... ^^
    Pour le "<uses-permission android:name="android.permission.INTERNET" />" c'est bon j'avais résolu le problème pour celui-ci.
    Pour le coup là, j'ai ce problème ci, voilà mon code d'erreurs retourné:

    E/genDROID: An error occured while fetching
    org.json.JSONException: No value for Musees
    at org.json.JSONObject.get(JSONObject.java:389)
    at org.json.JSONObject.getJSONArray(JSONObject.java:584)
    at com.example.eric.listemuseebfast.MuseeActivity$DownloadMusee.doInBackground(MuseeActivity.java:69)
    at com.example.eric.listemuseebfast.MuseeActivity$DownloadMusee.doInBackground(MuseeActivity.java:34)
    at android.os.AsyncTask$2.call(AsyncTask.java:305)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:761)

    Avec le code du MuseeActivity c'est mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    import android.app.ListActivity;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Toast;
     
    import org.json.JSONArray;
    import org.json.JSONObject;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
     
    /*
     * Generated with genDROID
     * http://gendroid.univ-pau.fr
     *
     */
    public class MuseeActivity extends ListActivity implements OnItemClickListener {
     
        private static final String BASE_URL = "j'ai cacher l'url de l'api";
     
     
        private final class DownloadMusee extends AsyncTask<String, Void, ArrayList<Musee>> {
     
            private HttpURLConnection urlConnection;
            private ProgressDialog progress;
     
            public DownloadMusee() {
                this.progress = new ProgressDialog(MuseeActivity.this);
            }
     
            @Override
            protected void onPreExecute() {
                progress.setTitle("Please wait");
                progress.setMessage("Fetching remote data...");
                progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                progress.show();
            }
     
            @Override
            protected ArrayList<Musee> doInBackground(String... params) {
     
                ArrayList<Musee> fetchedData = new ArrayList<Musee>();
                String stream = null;
     
                try {
                    URL url = new URL(params[0]);
                    this.urlConnection = (HttpURLConnection) url.openConnection();
                    InputStream in = new BufferedInputStream(this.urlConnection.getInputStream());
                    BufferedReader r = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = r.readLine()) != null) {
                        sb.append(line);
                    }
                    stream = sb.toString();
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("Musees");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee")
                        ));
                    }
                } catch(Exception e) {
                    Log.e("genDROID","An error occured while fetching", e);
                } finally {
                    this.urlConnection.disconnect();
                }
                return fetchedData;
            }
     
            @Override
            protected void onPostExecute(ArrayList<Musee> result) {
     
                if(progress.isShowing()) progress.dismiss();
                MuseeActivity.this.populate(result);
            }
        }
     
        private MuseeAdapter adapter;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            this.adapter = new MuseeAdapter(this, android.R.layout.simple_list_item_1);
            this.setListAdapter(adapter);
            getListView().setOnItemClickListener(this);
     
        }
     
        @Override
        protected void onStart() {
            super.onStart();
            new DownloadMusee().execute(BASE_URL);
        }
     
        public void populate(ArrayList<Musee> data) {
            this.adapter.clear();
            this.adapter.addAll(data);
            this.adapter.notifyDataSetChanged();
        }
     
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {
     
    		/* Uncomment if needed
    		Fruit currentFruit = this.adapter.getItem(position);
    		Intent goToNextScreen = new Intent(this, Elsewhere.class);
    		goToNextScreen.putExtra("selected", currentFruit);
    		this.startActivity(goToNextScreen);
    		*/
            Toast.makeText(this, "You selected item n° " + position, Toast.LENGTH_SHORT).show();
        }
    }

    Apparemment, il n'y a pas de valeur retournée, mais je n'ai pas trouvé d'où cela peut venir.

  3. #23
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Il faut adapter le parsing JSON à la structure spécifique de ton JSON que seul toi connaît.

    Et pourquoi utilises-tu android.R.layout.simple_list_item_1 ou lieu de R.layout.musee_item ??
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #24
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Et pourquoi utilises-tu android.R.layout.simple_list_item_1 ou lieu de R.layout.musee_item ??
    Avec R.layout.musee_item il ne fonctionne pas, même si j'ai renommé mon activity_main.xml par musee.item.xml.

    Il faut adapter le parsing JSON à la structure spécifique de ton JSON que seul toi connaît.

    Et bien j'ai fais ça:

    Classe Musee :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    import android.app.ListActivity;
    import android.os.Parcel;
    import android.os.Parcelable;
    import android.widget.AdapterView;
     
    import java.util.ArrayList;
     
    /**
     * Created by  on 26/12/2016.
     */
    public class Musee implements Parcelable {
     
        //@Test
        //public ArrayList<Musee> musees = new ArrayList<Musee>();
     
        private String datasetid;
        private String recordid;
        private String fields;
        private String periode_ouverture;
        private String nom_du_musee;
     
        //On appel le constructeur de notre class dans le main pour afficher la liste des musées?
        //Mes constructeurs
     
        public Musee(String datesetid, String recordid, String fields, String periode_ouverture, String nom_du_musee) {
            this.datasetid = "datasetid";
            this.recordid = "recordid";
            this.fields = "fields";
            this.periode_ouverture = "periode_ouverture";
            this.nom_du_musee = "nom_du_musee";
        }
     
        //Surcharge du constructeur Musee
     
        public Musee(Parcel in) {
            this.datasetid = "datasetid";
            this.recordid = "recordid";
            this.fields = "fields";
            this.periode_ouverture = "periode_ouverture";
            this.nom_du_musee = "nom_du_musee";
        }
     
        //On appel la methode getMusee() pour récupérer les musées que nous renvoie l'api JSON
        //Mes accesseurs getter + setter
        public String getDataSetid() {
            return this.datasetid;
        }
     
        public String getRecordid() {
            return this.recordid;
        }
     
        public String getfields() {
            return this.fields;
        }
     
        public String getPeriode_ouverture() {
            return this.periode_ouverture;
        }
     
        public String getNom_du_musee() {
            return this.nom_du_musee;
        }
     
        public void setDataSetid(String datasetid) {
            this.datasetid = datasetid;
        }
     
        public void setRecordid(String recordid) {
            this.recordid = recordid;
        }
     
        public void setFields(String fields) {
            this.fields = fields;
        }
     
        public void setPeriode_ouverture(String periode_ouverture) {
            this.periode_ouverture = periode_ouverture;
        }
     
        public void setNom_du_musee(String nom_du_musee) {
            this.nom_du_musee = nom_du_musee;
        }
     
        @Override
        public int describeContents() { return 0; }
     
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(this.datasetid);
            dest.writeString(this.recordid);
            dest.writeString(this.fields);
            dest.writeString(this.periode_ouverture);
            dest.writeString(String.valueOf(this.nom_du_musee));
        }
     
        @SuppressWarnings("rawtypes")
        private static final class CreatorImplementation implements Parcelable.Creator {
            public Musee createFromParcel(Parcel in) {
                return new Musee(in);
            }
     
            @Override
            public Object[] newArray(int size) {
                // TODO Auto-generated method stub
                return null;
            }
        }
     
    }
    Class Adapter:

    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
     
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
     
    public class MuseeAdapter extends ArrayAdapter<Musee> {
     
        private int myItemLayout;
        private LayoutInflater li;
     
        public MuseeAdapter(Context context, int resourceId) {
            super(context, resourceId);
            this.myItemLayout = resourceId;
            this.li = LayoutInflater.from(context);
        }
     
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
     
            View view = convertView;
     
            if (view == null)
            {
                view = this.li.inflate(this.myItemLayout, null);
            }
     
            Musee f = this.getItem(position);
            if(f != null)
            {
     
                TextView tv0 = (TextView)view.findViewById(R.id.datasetid);
                tv0.setText(String.valueOf(f.getDataSetid()));
     
                TextView tv1 = (TextView)view.findViewById(R.id.recordid);
                tv1.setText(String.valueOf(f.getRecordid()));
     
                TextView tv2 = (TextView)view.findViewById(R.id.fields);
                tv2.setText(String.valueOf(f.getfields()));
     
                TextView tv3 = (TextView)view.findViewById(R.id.periode_ouverture);
                tv3.setText(String.valueOf(f.getPeriode_ouverture()));
     
                TextView tv4 = (TextView)view.findViewById(R.id.nom_du_musee);
                tv4.setText(String.valueOf(f.getNom_du_musee()));
     
            }
            return view;
        }
     
    }
    Mon Activity:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    import android.app.ListActivity;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Toast;
     
    import org.json.JSONArray;
    import org.json.JSONObject;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
     
     
    public class MuseeActivity extends ListActivity implements OnItemClickListener {
     
        private static final String BASE_URL = "https://opendata.paris.fr/api/records/1.0/search/?dataset=liste-musees-de-france-a-paris&rows=50";
     
     
        private final class DownloadMusee extends AsyncTask<String, Void, ArrayList<Musee>> {
     
            private HttpURLConnection urlConnection;
            private ProgressDialog progress;
     
            public DownloadMusee() {
                this.progress = new ProgressDialog(MuseeActivity.this);
            }
     
            @Override
            protected void onPreExecute() {
                progress.setTitle("Please wait");
                progress.setMessage("Fetching remote data...");
                progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                progress.show();
            }
     
            @Override
            protected ArrayList<Musee> doInBackground(String... params) {
     
                ArrayList<Musee> fetchedData = new ArrayList<Musee>();
                String stream = null;
     
                try {
                    URL url = new URL(params[0]);
                    this.urlConnection = (HttpURLConnection) url.openConnection();
                    InputStream in = new BufferedInputStream(this.urlConnection.getInputStream());
                    BufferedReader r = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = r.readLine()) != null) {
                        sb.append(line);
                    }
                    stream = sb.toString();
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("Musees");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee")
                        ));
                    }
                } catch(Exception e) {
                    Log.e("genDROID","An error occured while fetching", e);
                } finally {
                    this.urlConnection.disconnect();
                }
                return fetchedData;
            }
     
            @Override
            protected void onPostExecute(ArrayList<Musee> result) {
     
                if(progress.isShowing()) progress.dismiss();
                MuseeActivity.this.populate(result);
            }
        }
     
        private MuseeAdapter adapter;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            this.adapter = new MuseeAdapter(this, android.R.layout.simple_list_item_1);
            this.setListAdapter(adapter);
            getListView().setOnItemClickListener(this);
     
        }
     
        @Override
        protected void onStart() {
            super.onStart();
            new DownloadMusee().execute(BASE_URL);
        }
     
        public void populate(ArrayList<Musee> data) {
            this.adapter.clear();
            this.adapter.addAll(data);
            this.adapter.notifyDataSetChanged();
        }
     
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {
     
    		/* Uncomment if needed
    		Fruit currentFruit = this.adapter.getItem(position);
    		Intent goToNextScreen = new Intent(this, Elsewhere.class);
    		goToNextScreen.putExtra("selected", currentFruit);
    		this.startActivity(goToNextScreen);
    		*/
            Toast.makeText(this, "You selected item n° " + position, Toast.LENGTH_SHORT).show();
        }
    }
    Mon musee_item.xml:

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingTop="2dp"
        android:paddingBottom="2dp">
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="10dp">
     
            <TextView
                android:id="@+id/datasetid"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <TextView
                android:id="@+id/recordid"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <TextView
                android:id="@+id/fields"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <TextView
                android:id="@+id/periode_ouverture"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <TextView
                android:id="@+id/nom_du_musee"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
        </LinearLayout>
     
    </LinearLayout>
     
    L'Api est déjà dans le code.
    Comment le changerais-tu ?

  5. #25
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    R.layout.musee_item doit compiler. Sauf si tu n'as pas correctement importé ta classe R par exemple ou tout autre étourderie du même genre. Ce n'est pas parce que ca marche pas qu'il faut le remplacer par ce qui te passe par la tête. Tu dois impérativement utiliser cette ressource pour que le tout fonctionne !

    Dans le même genre, tes 2 constructeurs de ta classe Musee sont encore faux. Enlèves ces foutus guillemets !! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Musee(String datesetid, String recordid, String fields, String periode_ouverture, String nom_du_musee) {
            this.datasetid = datasetid;
            this.recordid = recordid;
            this.fields = fields;
            this.periode_ouverture = periode_ouverture;
            this.nom_du_musee = nom_du_musee;
        }

    Si l'on affiche le JSON de manière intelligible (mode pretty print activé), on voit clairement que le JSONArray qui t'intéresse s'appelle 'records' et non pas 'Musees' qui n'existe pas. On voit également que ton POJO n'a pas été suffisamment bien pensé pour recevoir toutes les informations parsées (que fais-tu de la ville par exemple ?).
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  6. #26
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Ah oui, c'est vrai, je n'aurai pas dû mettre les guillemets, je ne sais même pas pourquoi je les ai mis. Probablement pour faire un test ?
    En tout cas, j'apprends des choses avec toi, c'est intéressant.

    Et oui, quand je regarde comment tu as transformé l'API, je vois mieux, il me maque plein de choses là pour le coup, c'est compliquer.
    Avec tout ça, je ne sais plus quoi mettre..

    J'ai enlevé les guillemets mais j'ai toujours le même message d'erreurs.
    Mes données ne passes pas.

  7. #27
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Bon, voilà à quoi ressemble mes classes désormais.
    Je me demande si j'ai bien pris tout les paramètres correctement, là je bloque.


    MuseeActivity:

    J'ai un problème dans ma boucle "for (int i = 0; i < concepts.length(); ++i)", il n'accepte pas mon getFloat et mon getDate dans mes record.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    import android.app.ListActivity;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Toast;
     
    import org.json.JSONArray;
    import org.json.JSONObject;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
     
     
    public class MuseeActivity extends ListActivity implements OnItemClickListener {
     
        private static final String BASE_URL = "https://opendata.paris.fr/api/records/1.0/search/?dataset=liste-musees-de-france-a-paris&rows=50";
     
     
        private final class DownloadMusee extends AsyncTask<String, Void, ArrayList<Musee>> {
     
            private HttpURLConnection urlConnection;
            private ProgressDialog progress;
     
            public DownloadMusee() {
                this.progress = new ProgressDialog(MuseeActivity.this);
            }
     
            @Override
            protected void onPreExecute() {
                progress.setTitle("Please wait");
                progress.setMessage("Fetching remote data...");
                progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                progress.show();
            }
     
            @Override
            protected ArrayList<Musee> doInBackground(String... params) {
     
                ArrayList<Musee> fetchedData = new ArrayList<Musee>();
                String stream = null;
     
                try {
                    URL url = new URL(params[0]);
                    this.urlConnection = (HttpURLConnection) url.openConnection();
                    InputStream in = new BufferedInputStream(this.urlConnection.getInputStream());
                    BufferedReader r = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = r.readLine()) != null) {
                        sb.append(line);
                    }
                    stream = sb.toString();
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("Musees");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee"),
                                record.getString("adr"),
                                record.getString("ville"),
                                record.getString("nomreg"),
                                record.getString("ferme"),
                                record.getFloat("coordonnees_[]"), //erreur ici
                                record.getInt("cp"),
                                record.getString("nomdep"),
                                record.getString("type"),
                                record.getString("coordinates[]"),
                                record.getDate("record_timestamp") //erreur ici
                        ));
                    }
                } catch(Exception e) {
                    Log.e("genDROID","An error occured while fetching", e);
                } finally {
                    this.urlConnection.disconnect();
                }
                return fetchedData;
            }
     
            @Override
            protected void onPostExecute(ArrayList<Musee> result) {
     
                if(progress.isShowing()) progress.dismiss();
                MuseeActivity.this.populate(result);
            }
        }
     
        private MuseeAdapter adapter;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            this.adapter = new MuseeAdapter(this, android.R.layout.simple_list_item_1);
            this.setListAdapter(adapter);
            getListView().setOnItemClickListener(this);
     
        }
     
        @Override
        protected void onStart() {
            super.onStart();
            new DownloadMusee().execute(BASE_URL);
        }
     
        public void populate(ArrayList<Musee> data) {
            this.adapter.clear();
            this.adapter.addAll(data);
            this.adapter.notifyDataSetChanged();
        }
     
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long id) {
     
    		/* Uncomment if needed
    		Fruit currentFruit = this.adapter.getItem(position);
    		Intent goToNextScreen = new Intent(this, Elsewhere.class);
    		goToNextScreen.putExtra("selected", currentFruit);
    		this.startActivity(goToNextScreen);
    		*/
            Toast.makeText(this, "You selected item n° " + position, Toast.LENGTH_SHORT).show();
        }
    }
    Ma class Musee:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
     
    import android.app.ListActivity;
    import android.os.Parcel;
    import android.os.Parcelable;
    import android.widget.AdapterView;
     
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
     
    /**
     * Created by Eric on 26/12/2016.
     */
    public class Musee implements Parcelable {
     
        //@Test
        //public ArrayList<Musee> musees = new ArrayList<Musee>();
     
        private String datasetid;
        private String recordid;
        private String fields;
        private String periode_ouverture;
        private String nom_du_musee;
        private String adr;
        private String ville;
        private String nomreg;
        private String ferme;
        private float coordonnees_[];
        private int cp;
        private String nomdep;
        private String type;
        private float coordinates[];
        private Date record_timestamp;
     
     
        //On appel le constructeur de notre class dans le main pour afficher la liste des musées?
        //Mes constructeurs
     
        public Musee(String datasetid, String recordid, String fields, String periode_ouverture, String nom_du_musee, String adr, String ville, String nomreg, String ferme, float coordonnees_[], int cp, String nomdep, String type, float coordinates[], Date record_timestamp) {
            this.datasetid = datasetid;
            this.recordid = recordid;
            this.fields = fields;
            this.periode_ouverture = periode_ouverture;
            this.nom_du_musee = nom_du_musee;
            this.adr = adr;
            this.ville = ville;
            this.nomreg = nomreg;
            this.ferme = ferme;
            this.coordonnees_ = coordonnees_;
            this.cp = cp;
            this.nomdep = nomdep;
            this.type = type;
            this.coordinates = coordinates;
            this.record_timestamp = record_timestamp;
        }
     
        //Surcharge du constructeur Musee
     
        public Musee(Parcel in) {
            this.datasetid = datasetid;
            this.recordid = recordid;
            this.fields = fields;
            this.periode_ouverture = periode_ouverture;
            this.nom_du_musee = nom_du_musee;
            this.adr = adr;
            this.ville = ville;
            this.nomreg = nomreg;
            this.ferme = ferme;
            this.coordonnees_ = coordonnees_;
            this.cp = cp;
            this.nomdep = nomdep;
            this.type = type;
            this.coordinates = coordinates;
            this.record_timestamp = record_timestamp;
        }
     
        //On appel la methode getMusee() pour récupérer les musées que nous renvoie l'api JSON
        //Mes accesseurs getter + setter
        public String getDataSetid() {
            return this.datasetid;
        }
     
        public String getRecordid() {
            return this.recordid;
        }
     
        public String getfields() {
            return this.fields;
        }
     
        public String getPeriode_ouverture() {
            return this.periode_ouverture;
        }
     
        public String getNom_du_musee() {
            return this.nom_du_musee;
        }
     
        public String getAdresse() {
            return this.adr = adr;
        }
     
        public String getVille() {
            return this.ville = ville;
        }
     
        public String getNomReg() {
            return this.nomreg = nomreg;
        }
     
        public String getFermer() {
            return this.ferme = ferme;
        }
     
        public float getCoordonnees() {
            return this.coordonnees_ = coordonnees_; //erreur ici
        }
     
        public int getCP() {
            return this.cp = cp;
        }
     
        public String getNomDep() {
            return this.nomdep = nomdep;
        }
     
        public String getType() {
            return this.type = type;
        }
     
        public float getCoordinates() {
            return this.coordinates = coordinates; //erreur ici
        }
     
        public Date getTime() {
            return this.record_timestamp;
        }
     
        public void setDataSetid(String datasetid) {
            this.datasetid = datasetid;
        }
     
        public void setRecordid(String recordid) {
            this.recordid = recordid;
        }
     
        public void setFields(String fields) {
            this.fields = fields;
        }
     
        public void setPeriode_ouverture(String periode_ouverture) {
            this.periode_ouverture = periode_ouverture;
        }
     
        public void setNom_du_musee(String nom_du_musee) {
            this.nom_du_musee = nom_du_musee;
        }
     
        public void setAdresse(String adr) {
            this.adr = adr;
        }
     
        public void setVille(String ville) {
            this.ville = ville;
        }
     
        public void setReg(String nomreg) {
            this.nomreg = nomreg;
        }
     
        public void setFerme(String ferme) {
            this.ferme = ferme;
        }
     
        public void setCoordonnes(float coordonnees_[]) {
            this.coordonnees_ = coordonnees_;
        }
     
        public void setCP(int cp) {
            this.cp = cp;
        }
     
        public void setCP(String nomdep) {
            this.nomdep = nomdep;
        }
     
        public void setType(String type) {
            this.type = type;
        }
     
        public void setCoordinates(float coordinates[]) {
            this.coordinates = coordinates;
        }
     
        public void setTime(Date record_timestamp) {
            this.record_timestamp = record_timestamp;
        }
     
        @Override
        public int describeContents() { return 0; }
     
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(this.datasetid);
            dest.writeString(this.recordid);
            dest.writeString(this.fields);
            dest.writeString(this.periode_ouverture);
            dest.writeString(this.nom_du_musee);
            dest.writeString(this.adr = adr);
            dest.writeString(this.ville = ville);
            dest.writeString(this.nomreg = nomreg);
            dest.writeString(this.ferme = ferme));
            dest.writeFloat(this.coordonnees_ = coordonnees_); //erreur ici
            dest.writeInt(this.cp = cp);
            dest.writeString(this.nomdep = nomdep);
            dest.writeString(this.type = type);
            dest.writeFloat(this.coordinates = coordinates); //erreur ici
            dest.writeString(String.valueOf(this.type = type));
        }
     
        @SuppressWarnings("rawtypes")
        private static final class CreatorImplementation implements Parcelable.Creator {
            public Musee createFromParcel(Parcel in) {
                return new Musee(in);
            }
     
            @Override
            public Object[] newArray(int size) {
                // TODO Auto-generated method stub
                return null;
            }
        }
     
    }

    J'ai mis un commentaire "//erreur ici" à chaque ligne où j'avais des erreurs, si tu vois d'où elles viennent ?
    J'espère aussi que le format des données que je récupère sont bonnes ?

    Je ne peux pas encore compiler et tester à cause des erreurs que j'ai eu précédemment.
    Et essayer d'enlever pour en créer d'autre qui vont juste camoufler mes erreurs sans me retourner de résultat à la fin, ça ne sert à rien..

    Merci pour ton aide, et pour ceux qui peuvent éventuellement m'aider.

  8. #28
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Bon, j'ai changé le type pour :
    record.getDouble("coordonnees_[]"),
    &
    record.getDouble("coordinates[]"),

    Voilà dans ma class musée les types que j'ai mis au final:

    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
     
    private String datasetid;
        private String recordid;
        private String fields;
        private String periode_ouverture;
        private String nom_du_musee;
        private String adr;
        private String ville;
        private String nomreg;
        private String ferme;
        private double coordonnees_[];
        private int cp;
        private String nomdep;
        private String type;
        private double coordinates[];
        private Date record_timestamp;
    Par contre j'ai toujours un problème pour récupérer la date du champs "record_timestamp" , quand je fais ça:

    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
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("Musees");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee"),
                                record.getString("adr"),
                                record.getString("ville"),
                                record.getString("nomreg"),
                                record.getString("ferme"),
                                record.getDouble("coordonnees_[]"),
                                record.getInt("cp"),
                                record.getString("nomdep"),
                                record.getString("type"),
                                record.getDouble("coordinates[]"),
                                record.getDate("record_timestamp") //erreur ici
                        ));
                    }
    record.getDate ne fonctionne pas, j'en ai essayé d'autres, mais je ne sais pas comment récupérer "record_timestamp" , c'est plus galère de récupérer des données de type Date en JSON apparemment ?
    Comme assez souvent..
    Du coup je bloque là-dessus, et je me demande si une fois ce problème-là résolu si mes données s'afficheront enfin dans ma vue.

  9. #29
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Tu ne récupères pas d'objet date depuis un JSON, tu récupères du texte.
    Tu dois ensuite le transformer toi-même en objet date, via un SimpleDateFormat, par exemple.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  10. #30
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Je regarde comment je peux faire pour le récupérer alors.

  11. #31
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Je regarde, mais je ne vois pas trop comment le parser et l'intégrer à mon objet ?
    Une idée ?

  12. #32
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Si l'on affiche le JSON de manière intelligible (mode pretty print activé), on voit clairement que le JSONArray qui t'intéresse s'appelle 'records' et non pas 'Musees' qui n'existe pas. On voit également que ton POJO n'a pas été suffisamment bien pensé pour recevoir toutes les informations parsées (que fais-tu de la ville par exemple ?).
    Je prend le temps de me pencher sur ton JSON et de rectifier ton erreur. Comme d'habitude, tu t'en fous complètement. La preuve, ton code n'a pas changé d'un iota. Ca doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONArray concepts = new JSONObject(stream).getJSONArray("records");
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  13. #33
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Pourquoi tu ne m'expliques pas au lieu de dire que je m'en fou ?
    Tu penses vraiment qui si j'en aurai rien à faire je passerai autant de temps sur cette application ?
    Pourquoi être aussi agressif en jugent directement les gens comme ça ?

    Moi j'aimerai juste bien qu'on m'explique plutôt que de me juger sur un forum, je me suis jamais dit expert à preuve du contraire, donc merci d'accepter le niveau de chacun, si je ne suis pas le bienvenue je préfère que l'on me le dise de suite plutôt que de me faire lyncher par la suite.

    Ensuite, peut-on m'aider ?
    Merci, je suis venu ici dans l'optique d'apprendre d'avantage, d'échanger et d'y arriver, mais pour le moment je n'ai toujours pas réussi.
    Pour ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JSONArray concepts = new JSONObject(stream).getJSONArray("records");
    J'aimerai bien comprendre..

  14. #34
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    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
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("records");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee"),
                                record.getString("adr"),
                                record.getString("ville"),
                                record.getString("nomreg"),
                                record.getString("ferme"),
                                record.getDouble("coordonnees_[]"),
                                record.getInt("cp"),
                                record.getString("nomdep"),
                                record.getString("type"),
                                record.getDouble("coordinates[]"),
                                record.getDate("record_timestamp") //erreur ici
                        ));
                    }
    J'ai remplacé par "records", sans savoir pourquoi, mais je l'ai fais.

  15. #35
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par eristoff72 Voir le message
    Comment je peux récupérer ma date dans mon fichier JSON ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String dateStr = record.getString("record_timestamp");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date museeTime = sdf.parse(dateStr);
     
    Musee m = new Musee();
    m.setRecordTimestamp(museeTime);
    //puis ici les autres setters
    fetchedData.add(m); //objet ajouté à l'ArrayList
    Si cela ne marche pas, changes le champs de ton POJO en String plutôt que Date. Cela fera l'affaire.

    Et pour finir par LA question qui tue : a quoi te sert de récupérer cette information au final ? c'est la date d'ajout de chaque enregistrement dans la base de donnée des musées...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  16. #36
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    "Si cela ne marche pas, changes le champ de ton POJO en String plutôt que Date. Cela fera l'affaire."

    Et bien c'est ce que j'ai fait dans ma class Musee, mais ça ne fonctionne pas comme ça comme j'ai dit.
    Changer le type de ma variable "record_timestamp" c'est la première chose que j'ai fait, sauf que par la suite mon getTime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        public Date getTime() {
            return this.record_timestamp;
        }
    Attend en retour un type Date au lieu d'un String, et oui, je l'ai bien changé dans les paramètres de mon constructeur et dans la déclaration de mes variables, même après avoir clean et rebuild mon projet.

    "A quoi te sert de récupérer cette information au final ?"

    Je n'ai pas posé cette question, peut-être une question sur ce que faisait le code exactement, j'aime bien savoir ce que je fais.

    Ce code ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String dateStr = record.getString("record_timestamp");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date museeTime = sdf.parse(dateStr);
     
    Musee m = new Musee();
    m.setRecordTimestamp(museeTime);
    Je dois le réutilisé dans :

    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
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("records");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee"),
                                record.getString("adr"),
                                record.getString("ville"),
                                record.getString("nomreg"),
                                record.getString("ferme"),
                                record.getDouble("coordonnees_[]"),
                                record.getInt("cp"),
                                record.getString("nomdep"),
                                record.getString("type"),
                                record.getDouble("coordinates[]"),
                                record.getString("record_timestamp") //erreur ici
                        ));
                    }
    logiquement, non ?

  17. #37
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Oui. A la différence près que cette solution t'oblige à créer l'objet Musee en amont, puis à valuer ses champs un à un avec les setters, alors que dans la solution du générateur tout cela est fait au moment de la construction de l'objet.


    Et par ailleurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String getTime() {
            return this.record_timestamp;
        }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  18. #38
    Membre à l'essai
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Points : 20
    Points
    20
    Par défaut
    Par rapport à ta remarque sur ce bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public String getTime() {
            return this.record_timestamp;
        }
    Je viens de le rechanger, mais je l'avais déjà changer avant si je ne me trompe pas, en tout cas je viens de le remettre.

    Pour le reste, revoici mes getters:

    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
     
        public String getDataSetid() {
            return this.datasetid;
        }
     
        public String getRecordid() {
            return this.recordid;
        }
     
        public String getfields() {
            return this.fields;
        }
     
        public String getPeriode_ouverture() {
            return this.periode_ouverture;
        }
     
        public String getNom_du_musee() {
            return this.nom_du_musee;
        }
     
        public String getAdresse() {
            return this.adr = adr;
        }
     
        public String getVille() {
            return this.ville = ville;
        }
     
        public String getNomReg() {
            return this.nomreg = nomreg;
        }
     
        public String getFermer() {
            return this.ferme = ferme;
        }
     
        public double[] getCoordonnees() {
            return this.coordonnees_ = coordonnees_; //erreur ici
        }
     
        public int getCP() {
            return this.cp = cp;
        }
     
        public String getNomDep() {
            return this.nomdep = nomdep;
        }
     
        public String getType() {
            return this.type = type;
        }
     
        public double[] getCoordinates() {
            return this.coordinates = coordinates; //erreur ici
        }
     
        public String getTime() {
            return this.record_timestamp;
        }
    Et bien j'ai un soucis ici:

    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
     
                    JSONArray concepts = new JSONObject(stream).getJSONArray("records");
                    for (int i = 0; i < concepts.length(); ++i) {
                        JSONObject record = concepts.getJSONObject(i);
                        fetchedData.add(new Musee(
                                record.getString("datasetid"),
                                record.getString("recordid"),
                                record.getString("fields"),
                                record.getString("periode_ouverture"),
                                record.getString("nom_du_musee"),
                                record.getString("adr"),
                                record.getString("ville"),
                                record.getString("nomreg"),
                                record.getString("ferme"),
                                record.getDouble("coordonnees_[]"),
                                record.getInt("cp"),
                                record.getString("nomdep"),
                                record.getString("type"),
                                record.getDouble("coordinates[]"),
                                record.getString("record_timestamp") //erreur ici
                        ));
                    }
    Voilà le type d'erreur que j'ai: http://prntscr.com/dtwk1k
    Il n'a pas l'air d'aimer les tableaux, j'ai fais le test, pour moi c'était cohérent, après j'attends des avis, car je ne sais pas du tout si c'est faisable comme ça.

    Pour le reste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String dateStr = record.getString("record_timestamp");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date museeTime = sdf.parse(dateStr);
     
    Musee m = new Musee();
    m.setRecordTimestamp(museeTime);
    Voilà un screen de ce que sa donne chez moi: http://prntscr.com/dtwmqc

    Je ne connais pas trop ce prefixe record, il doit y avoir une doc dessus ?
    J'ai essayé de trouvé une bonne doc, mais ceux sur quoi je suis tomber ne dit pas grand chose.

    Ensuite "setRecordTimestamp" n'est pas reconnu chez moi, c'est une fonction universel ou je dois crée un setter dans ma classe Musee ?

    Merci pour ton retour.

  19. #39
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Capture d'écran 1 : tu ne donnes pas les bons paramètres à ton constructeur
    Capture d'écran 2 : le code doit être placé dans la boucle (d'ailleurs je l'ai modifié si tu regardes bien mon précédent message)

    Quant à setRecordTimestamp() c'est le nom que j'ai supposé être ton setter sur le champs time de ton POJO.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  20. #40
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Alors, sans vouloir te vexer eristoff72, je te conseille extrêmement fortement (mais vraiment) de lire et comprendre les bases du JSON, ainsi que de la programmation, et Java en prime au passage.
    Toujours sans vouloir te vexer, tu poses des questions qui montrent clairement que tu ne comprends pas ce que tu fais, ni ce que nous te répondons. De même, les extraits de ton code me laissent à penser ça. Prend un peu de temps pour réfléchir posément, tester des trucs sur lesquels tu n'es pas sûr histoire de bien comprendre ce que tu fais et manipules, lis et comprends des tutos à jour...
    Souffle un coup, repars sur les bases, et ça devrait aller mieux.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/03/2016, 14h14
  2. Problème d'affichage des données de la BD dans une JList
    Par hela_sfar dans le forum Composants
    Réponses: 0
    Dernier message: 15/07/2013, 15h14
  3. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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