Pour ta question, les flux s'affichent effectivement aléatoirement (en fonction du premier qui a fini de télécharger j'imagine ^^).
Je suis bloqué au même point que toi, tu as la solutions pas propre avec 3 recyclerView, sinon il faudrait une solution pour créer le document à partir des 3 flux (puis le trier par date pour les points bonus) avant de l'envoyer à la vue.
Je n'ai personnellement rien trouvé pour ça, malgré pas mal de recherche sur le net, j'ai donc repris un tuto java dans l'espoir d'avoir plus d'information.
Merci pour la réponse, ça me rassure de voir que je ne suis pas le seul à bloquer sur ce point
Concernant les solutions que tu proposes, oui effectivement j'y avais pensé, notamment le fait de trouver un moyen de réunir les 3 flux dans un même document (les concaténer je me disais) mais impossible de trouver comment faire ou un quelconque indice sur le net Je vais continuer à chercher et te tiendrai au courant si jamais j'ai quelque chose !
Tu verras c'est pas trop compliqué à mettre en place et tu constateras que les 3 tâches afficheront presque toutes en même temps (à quelques millièmes de seconde) le "finished" si t'as pensé à mettre un Log.e("XMLAsyncTask", "Finished"); dans le onPostExecute de ces dernières !
Par contre je sais pas si t'as déjà implémenté le bouton "rafraîchir" comme demandé dans l'énoncé mais si tu veux relancer des AsyncTask la seule solution consistera à recréer de nouvelles instances (moi j'avais galéré à comprendre ça)
Oui le gap de compétences sur le TP en comparaison des autres est quand même assez important !
J'ai eu la même idée que toi, concaténation de fichier XML, je sais déjà le faire en PHP du moment que les fichiers gardent le même format (ici notre cas) mais en Java je bloque... les seules informations à ce sujet me ramène à crée un fichier physique !
Manque de compétences en Java j'imagine ? ou solution plus simple ?
Pour les asyncTask en parallèle j’étais tombé sur les mêmes infos que toi mais je m'était dit que c'était pas la solution la plus "propre" sachant qu'on nous rabâche dans le tuto que c'est "pas fait pour".
Donc je vais regarder pour reprendre le tp avec le guide que tu m'as fournis.
Pour le rafraichissement j'avais réussi avec la même solution que toi, relancer des instances même si je trouve pas ça optimal : (
Je ne sais pas quand je reprendrais l'activité vu que j'ai commencé un autre tuto android (sur OpenClassRoom, non certifiant mais bien plus complet et détaillé que je conseil) mais je reste à suivre le sujet et je ne manquerais pas d'y poster mes évolutions.
je constate que beaucoup peine sur le TP 3, voici quelques pistes :
- Les AsyncTask ne se deroulent pas en parallele... par defaut ! Il est possible de les faires se derouler en parallele. Vous avez donc deux choix : soit trouver comment faire pour que plusieurs AsyncTask se deroulent en parallele, soit utiliser les threads (et la fonction runOnUiThread). A vous de voir
- L'ordre d'affichage des news peut etre definit par leur date, pour cela, vous pouvez utiliser la methode Collections.sort().
J'ai une petite question concernant le TP de la partie 3 (encore une fois) !
Je viens d'en arriver à bout mais une chose me perturbe concernant ce qui doit être affiché dans l'activité qui se lance après clic sur un élément de notre liste d'articles. Il s'agit bien de charger ici une page WEB, je me trompe ?
je constate que beaucoup peine sur le TP 3, voici quelques pistes :
- Les AsyncTask ne se deroulent pas en parallele... par defaut ! Il est possible de les faires se derouler en parallele. Vous avez donc deux choix : soit trouver comment faire pour que plusieurs AsyncTask se deroulent en parallele, soit utiliser les threads (et la fonction runOnUiThread). A vous de voir
- L'ordre d'affichage des news peut etre definit par leur date, pour cela, vous pouvez utiliser la methode Collections.sort().
Merci pour ta réponse !
C'est vrai qu'en lisant le Mooc j'ai surtout retenu qu'il ne fallait PAS utiliser les AsyncTask en parallèle, que c'était possible mais vraiment pas une bonne pratique. J'ai réussi à le faire avec des threads mais je n'arrive pas à sortir le code le la class "main" à cause du runOnUiThread mais j'imagine que c'est ici un manque de compétences en Java sur ce type de fonctions.
Je vais reprendre ça et finir le TP 3, utilisations des Collections donc
Désolé de poser cette question mais y a un truc que j'ai du rater.
Je suis en train de faire l'activité n°1 et je n'arrive pas à définir un titre à ma webView. Je fais un setTilte() et la valeur de la string est correct. J'ai bien un thême avec une toolBar. En mode design je vois le nom de l'application dans la toolbar mais une fois l'application elle n'apparait plus.
Bref je comprends pas avez vous une idée?
Merci par avance.
J'ai trouvé la cause. Si ça peut aider quelqu'un. Cela vient du fait que l'activité sans toolBar hérite de "Activity" et non de "AppCompatActivity".
J'ai réussi à créer une AsyncTask qui va récupérer successivement les flux RSS passés en paramètres, et les afficher (gràce à une boucle for).
Les 3 flux s'affiche successivement dans mon application, mais chaque flux écrase le précédent.
J'ai fait des recherche sur internet, mais je n'arrive pas à savoir s'il faut que mon AsyncTask traite elle-même les infos reçu, et les merge dans un unique DOM Document, ou si au contraire, il vaut mieux que l'AsyncTask renvoi un document unique par flux, et que ce soit l'Adapter qui mette à jour le document en ajoutant au document actuel le nouveau (dans la classe setXMLDocument).
Par ailleurs, comment cocatener ou merger deux flux rss? ou deux DOM Document?
J'ai essayé de créer une SequenceInputStream pour ensuite la parser en une fois, mais ça ne marche pas. Auriez-vous une piste pour pouvoir créer un Document et y ajouter les flux au fur et à mesure.
Au cas où je vous mets mon code pour le SequenceInputStream
Je me situe encore dans le 1er Chapitre (encore vraiment débutant )
Le problème est que lorsque je lance mon simulateur Nexus S (API 23), mon application ne se lance pas (elle ne se trouve d'ailleurs pas dans le téléphone simulé) or je pense avoir tout fait comme dans la formation...
Je désespère d'autant plus car mon téléphone n'est pas sous Android.. donc mon unique moyen de tester mon appli c'est le simulateur^^
Je me situe encore dans le 1er Chapitre (encore vraiment débutant )
Le problème est que lorsque je lance mon simulateur Nexus S (API 23), mon application ne se lance pas (elle ne se trouve d'ailleurs pas dans le téléphone simulé) or je pense avoir tout fait comme dans la formation...
Je désespère d'autant plus car mon téléphone n'est pas sous Android.. donc mon unique moyen de tester mon appli c'est le simulateur^^
Merci de m'éclairer
Mon problème est résolu !
Pour ceux qui veulent savoir pourquoi, c'est parce que je n'avais pas la dernière version du JDK (attention, il faut aller dans les paramètre du logiciel Android Studio afin de lui dire de prendre la nouvelle version du JDK)
Voici un extrait de code du Mooc sur android (chapitre 2 partie 5 sur les RecyclerView). Et plus précisément le ViewHolder.
public class MyViewHolder extends RecyclerView.ViewHolder {
private final TextView name;
private final TextView description;
private Pair<String, String> currentPair;
public MyViewHolder(final View itemView) {
super(itemView);
name = ((TextView) itemView.findViewById(R.id.name));
description = ((TextView) itemView.findViewById(R.id.description));
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new AlertDialog.Builder(itemView.getContext())
.setTitle(currentPair.first)
.setMessage(currentPair.second)
.show();
}
});
}
public void display(Pair<String, String> pair) {
currentPair = pair;
name.setText(pair.first);
description.setText(pair.second);
}
}
Je n'arrive pas à comprendre comment la méthode Onclick(View view) du new View.OnClickListener() réussisse à accéder à l'élément currentPair qui appartient au Holder.
Pour moi, il ne devrait pas pouvoir y accéder
Si quelqu'un peut éclairer ma lanterne, je suis preneur
C'est ce qu'on appelle une implémentation inline. Dans ces cas là, l'implémentation inline tient une référence de la classe contenante (dans ton cas le Holder) permettant alors de manipuler ses attributs.
Error:Execution failed for task ':app:mergeDebugResources'. > Error: org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/home/dedian/Android-dev/android-sdk-linux/build-tools/19.1.0/aapt''
:app:mergeDebugResources FAILED Error:org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/home/dedian/Android-dev/android-sdk-linux/build-tools/19.1.0/aapt''
{
"cours": [{
"id": "1",
"lecon": "Conjugaison du verbe aller avec les auxiliaires etre et avoir.",
"exo1": "I am going",
"exo2": "I have going",
"reponse": "exo1",
"valide": "oui",
"jour": "2016-05-19"
}, {
"id": "2",
"lecon": "la 3eme personne du singulier",
"exo1": "He drink",
"exo2": "He drinks",
"reponse": "exo2",
"valide": "",
"jour": "2016-05-26"
}]
}
Tout d'abord merci à Salomon pour ce tuto qui me permet de toucher de plus prêt le dev sur android .
Je viens de finir le tp du lancé de dé , et je me suis rendu compte qu'il m'étais impossible de faire descendre ma page sur l'émulateur en mode paysage.
Ce qui fait que je ne peut pas voir la suite de ma page. Sur le menu de l'émulateur je peut descendre sans problème en utilisant le clic gauche , mais pas sur l'appli , ce qui me fait dire que la boulette viens de moi qui ai du oublier quelque chose mais la.... honnêtement, soi je suis fatigué, soi j'ai pas les yeux en face des trous mais je ne comprend pas pourquoi...
Si quelqu'un peu m'éclairer je lui en serais tréééés reconnaissant !
Je suis occupé avec la 1er activité à rendre pour ce cours et je bloc à un endroit, c'est quand lorsqu'on clic sur un élément de la recyclerView et qu'on doit atterrir sur la page détaille du titre
public class MyViewHolder extends RecyclerView.ViewHolder {
private final TextView newsTitel;
private FakeNews currentNews;
private Activity activity;
public MyViewHolder(final View itemView) {
super(itemView);
newsTitel = ((TextView) itemView.findViewById(R.id.newsTitel));
// l'action de cliquer sur le titre
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(itemView.getContext(), MyWebViewActivity.class);
activity.startActivity(intent);
}
});
}
public void display(FakeNews fk) {
currentNews = fk;
newsTitel.setText(fk.title);
}
}
voila ce que j'ai pour le moment en me basant sur le cours et sur un ancien message posté ici
le soucis est donc avec le startActivity(intent), j'ai du mal à voir comment bien l'utiliser
là comme ça le code ne rougit rien mais si je lance l'apk et que je clic, hop ça plante
je suis assez perdu :/ ce qui me perturbe le plus c'est que je regarde les anciens commentaire d'ici où ça fonctionne xD
je vais continuer de chipoter et merci d'avance pour les réponses qui m'aiderait ^^"
edit: pour le moment je vais juste que cliquer quelque part envoie vers une autre activité, les passages de variables viendront après ;-)
là comme ça le code ne rougit rien mais si je lance l'apk et que je clic, hop ça plante
Quand ton application plante, tu as dans le logcat ce qu'on appelle une stacktrace (des lignes en rouges). C'est l'étude de ces lignes qui vont permettre de comprendre le problème. Ouvre un nouveau sujet en remettant ton code et la stacktrace pour qu'on l'analyse.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog