J'ai donc une petite application sur laquelle je travaille qui gratte les bandes dessinées du web et les affiche sur mon téléphone. Rien d'extraordinaire, juste l'utiliser pour apprendre les ficelles du métier. La fonction appelée comicReload(); fait la plupart des travaux et il est appelé à plusieurs reprises dans l'application (à la première exécution, et lorsque l'utilisateur clique sur certains boutons Voici la fonction:.Android: Fonction ne fonctionne pas dans le fil, mais fonctionne autrement (en essayant d'ajouter ProgressDialog)
public void comicReload() throws IOException {
//clears some Vectors that have things in them from the last run
imagetitles.clear();
imagetext.clear();
imagelinks.clear();
//forms the link it will connect to, and connects
connector = siteBase + Integer.toString(comicNumber);
doc = Jsoup.connect(connector).get();
media = doc.select("[src]");
//gets the required media from the site
for (Element src : media) {
if (src.tagName().equals("img"));
imagetitles.add(src.attr("alt"));
imagetext.add(src.attr("title"));
imagelinks.add(src.attr("src"));
}
//some variables I could probably get rid of, but it's easy to read
Integer titlesize = imagetitles.size();
Integer textsize = imagetext.size();
Integer linkssize = imagelinks.size();
comicTitle = (imagetitles.get(titlesize-4));
hoverText = (imagetext.get(textsize-4));
comicLink = (imagelinks.get(linkssize-4));
//gets the picture I am looking for along with the associated text
URL url = new URL(comicLink);
InputStream is = (InputStream) url.getContent();
image = Drawable.createFromStream(is, "src name");
//finally puts the scraped information into the layout
comicView.setImageDrawable(image);
title.setText(comicTitle);
htext.setText(hoverText);
}
Il fonctionne à 100% bien quand on l'appelle, mais . il est un peu lent sur les réseaux 3G alors j'ai essayé d'ajouter un ProgressDialog montrer pendant qu'il charge Ceci est ma tentative (ce qui est le code qui va où je juste avoir comicReload();)
pd = ProgressDialog.show(this, "Getting Comic", "Loading", true, false);
new Thread(new Runnable() {
public void run() {
try {
comicReload();
} catch (IOException e) {
Log.i("ComicReloadFail","Sam");
}
pd.dismiss();
return;
}
}).start();
le fil lui-même fonctionne bien, et quand je mets du code aléatoire à exécuter à la place du bloc try-catch avec le comicReload(), tout va dandy. là, cependant, en cours d'exécution de l'application provoque le spinner ProgressDialog à tourner pendant quelques secondes avant que la force de l'application se ferme. Qu'est-ce qui cause ça? Et pourquoi comicReload() ne fonctionne plus quand il est dans un thread. Je veux juste un moyen d'exécuter cette méthode avec un spinner en cours d'exécution.
Merci d'avance les gars, je sais que c'était beaucoup à lire.
Désolé si je suis stupide mais ... qu'est-ce que cela fait pour moi? –
Désolé je ne pourrais pas avoir été clair, ce que vous faites avec ceci placez-le dans votre fil d'interface principal (généralement l'activité), de cette façon vous pouvez envoyer un message de votre thread qui fait la mise à jour être pris en compte car ils sont considérés comme venant du fil de l'interface utilisateur –
Même si je ne connais pas assez pour bien comprendre ce que vous avez dit, vous m'avez donné assez d'informations pour utiliser Google et le faire fonctionner. Donc un chèque vert et un merci pour vous. –