9
votes

Android Comment attendre que le code se termine avant de continuer

J'ai une méthode appelée hostphoto () code>; Il télécharge essentiellement une image sur un site et récupère un lien. J'ai ensuite une autre méthode pour poster le lien vers un site Web.

Maintenant la façon dont je suis à l'aide de cette méthode: P>

            String link;  new Thread(){

                @Override
                public void run(){
                    HostPhoto photo = new HostPhoto(); //create the host class


                    link= photo.post(filepath); // upload the photo and return the link
                    Log.i("link:",link);
                }
            }.start();


4 commentaires

Vous devriez publier plus de code, en particulier le contenu de hostphoto () , car le comportement que vous décrivez est non standard.


Un asyncktask ne résout pas ce problème depuis hostphoto () ne bloque même pas le fil. Comme ATC mentionné, vous devez poster du code de hostphoto () .


Le code d'hostphoto a été mis à jour


Mise à jour 2: Fonctionne enfin! Le problème était le fil au sein de l'hostphoto (), quelqu'un pourrait-il me fournir une explication pourquoi ce fil aurait causé cela? Merci à tous ceux qui ont répondu.


5 Réponses :


2
votes

Je suppose que vous êtes (ou devrait être) à l'aide d'un fil séparé pour accomplir de manière asynchrone.

Vous devez placer le post () dans un rappel appelé lorsque hostphoto () est terminé.

Généralement, je l'ai fait avec AsynccTask avec Android .. .

Ceci vous fournit le rappel onpostexecute () que vous pouvez faire votre message post () à l'intérieur.


0 commentaires


0
votes

Vous aurez probablement besoin de regarder motif de rappel en Java .


0 commentaires

13
votes

Vous pouvez utiliser AsynccTask ici,

AsynccTask

En utilisant que vous pouvez exécuter le code de

hostphoto ()

dans doInbackground () puis exécutez le code de

post (texte + "" + lien);

dans la méthode Onpostexecute (), la meilleure solution pour vous.

Vous pouvez écrire le code dans ce motif xxx

et le peut l'exécuter à l'aide de xxx


2 commentaires

Hé, merci pour votre réponse. Après avoir effectué votre méthode, je reçois une erreur.check Out HTE Mise à jour question ci-dessus


Fonctionne enfin! Le problème était le fil au sein de l'hostphoto (), quelqu'un pourrait-il me fournir une explication pourquoi ce fil aurait causé cela?



0
votes

à votre deuxième question:

Quelqu'un pourrait-il me fournir une explication pourquoi ce fil aurait causé cela?

Vous appelez "link = photo.post (FilePath);" qui fonctionne sur un nouveau fil. Alors que cette méthode est toujours en cours d'exécution, la liaison est toujours nulle et votre thread actuel (fil principal) continue de fonctionner avec ce lien (null à cette époque)

Dans cette situation, vous devez attendre le résultat, alors laissez le nouveau thread exécuter la méthode et, après avoir terminé, ce thread demandera au fil principal de mettre à jour le résultat (par un rappel ou un gestionnaire), tous ces travaux sont Bien encapsulé par Android AsyncCTTK


0 commentaires