Tengo un método llamado hostPhoto()
; Básicamente carga una imagen a un sitio y recupera un enlace. Luego tengo otro método para publicar el enlace a un sitio web.Android cómo esperar a que el código finalice antes de continuar
Ahora, la forma Im' usando este método es la siguiente:
String link = hostPhoto(); //returns a link in string format
post(text+" "+link); // posts the text + a link.
Mi problema es ... que el hostPhoto()
toma unos segundos para cargar y recuperar el enlace, mi programa parece no espere y continúo publicando, por lo tanto, me quedé con el enlace como nulo,
¿De todos modos podría hacer que obtenga el enlace primero ... y luego publicarlo? como un tipo de OnComplete? o algo así ... pensé que mi método anterior funcionaría, pero al hacer Log.i parece que el enlace se devuelve a la cadena después de un segundo más o menos.
ACTUALIZACIÓN: Este es el progreso de las actualizaciones de mi problema, estoy utilizando una AsyncTask como se informó, pero el error de Log.i muestra el urlLink como nulo ... esto significa que el enlace solicitado desde hostphoto nunca regresó. para los registros ...
ACTUALIZACIÓN 2: FINALMENTE FUNCIONA! El problema era el hilo dentro de hostPhoto(), ¿podría alguien explicarme por qué ese hilo habría causado esto? Gracias a todos los que respondieron.
private class myAsyncTask extends AsyncTask<Void, Void, Void> {
String urlLink;
String text;
public myAsyncTask(String txt){
text=txt;
}
@Override
protected Void doInBackground(Void... params) {
urlLink=hostPhoto();
//Log.i("Linked", urlLink);
return null;
}
@Override
protected void onPostExecute(Void result) {
try {
Log.i("Adding to status", urlLink);
mLin.updateStatus(text+" "+urlLink);
Log.i("Status:", urlLink);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
hostPhoto() hace lo siguiente:
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();
Debe publicar más código, especialmente el contenido de 'hostPhoto()', ya que el comportamiento que está describiendo no es estándar. –
Un 'AsyncTask' no resuelve este problema ya que' hostPhoto() 'ni siquiera bloquea el hilo. Como mencionó atc, necesitas publicar el código de 'hostPhoto()'. –
el código de hostPhoto ha sido actualizado – asd2005