Android cómo esperar a que termine el código antes de continuar

Tengo un método llamado hostPhoto() ; Básicamente sube una imagen a un sitio y recupera un enlace. Entonces tengo otro método para publicar el enlace a un sitio web.

Ahora la manera Im que usa este método es como esto:

 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 esperar y seguir publicando, por lo tanto, me quedo con el enlace como nulo,

¿Hay de todos modos podría hacerlo conseguir el acoplamiento primero … y después fijar? Como una especie 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 o algo así.

UPDATE: Este es el progreso de las actualizaciones en mi problema, estoy usando un AsyncTask como informado, pero el error de Log.i mostrando el urlLink como un nulo … esto significa que el enlace solicitado de hostphoto nunca regresó intime para los Logs. .

ACTUALIZACIÓN 2: ¡FINALMENTE TRABAJA! El problema fue el hilo dentro de la hostPhoto (), ¿alguien podría proporcionarme un explination 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 esto:

  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(); 

Puede utilizar AsyncTask aquí,

AsyncTask

Usando eso puedes ejecutar el código de

hostPhoto()

En doInBackground () y luego ejecutar el código de

post(text+" "+link);

En el método onPostExecute (), que será la mejor solución para usted.

Puede escribir el código en este patrón

 private class MyAsyncTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { hostPhoto(); return null; } @Override protected void onPostExecute(Void result) { post(text+" "+link); } } 

Y puede ejecutarlo usando

  new MyAsyncTask().execute(); 

Estoy asumiendo que usted es (o debe ser) usando un hilo de rosca separado asincrónicamente para lograr esta acción.

hostPhoto() colocar la post() en una devolución de llamada que se llama cuando hostPhoto() esté completa.

Generalmente he hecho esto con AsyncTask con Android …

Esto le proporciona la devolución de llamada onPostExecute() que puede hacer su post() dentro.

Puede utilizar AsyncTask , consulte esto :

EDIT : y él es un tutorial de vídeo de asynctask, o remítase a este ejemplo de ejemplo: clic aquí

Es probable que tenga que echar un vistazo al patrón de devolución de llamada en Java .

A su segunda pregunta:

¿Alguien podría proporcionarme una explicación de por qué ese hilo hubiera causado esto?

Usted llama "link = photo.post (filepath);" Que se está ejecutando en un nuevo hilo. Mientras ese método sigue funcionando, el vínculo sigue siendo nulo y el hilo actual (hilo principal) continúa ejecutándose con ese enlace (nulo en ese momento)

En esta situación, debe esperar el resultado, así que deje que el nuevo Thread ejecute el método y después de completarlo, el hilo preguntará al subproceso principal para actualizar el resultado (por algún Callback o Handler), todos los trabajos están bien encapsulados por Android AsyncTask

  • Ver el almacenamiento en caché de encabezados y pies de página en una vista de lista
  • Envío de una imagen de Matlab a una tableta Android
  • Android.intent.action.PACKAGE_ADDED BroadcastReceiver no recibe el tema añadido intención en JB 4.1
  • Firmar un apk como sistema usando las claves encontradas en source / build / target / product / security /
  • Dentro de OnClickListener No puedo tener acceso a muchas cosas - cómo acercarme?
  • Pila extraña en el informe de fallo de android
  • Android 2.2 Webview hace que OpenGL ES API no tenga ningún contexto actual (registrado una vez por hilo)
  • Cómo detener el ataque hack / DOS en la API web
  • Permisos de Android M con notificaciones de parsemisión
  • ¿Cómo recuperar datos de la base de datos de Firebase en orden descendente?
  • ¿Cómo puedo iniciar una nueva actividad de Android con una cadena?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.