2015-12-15 6 views
-1
Thread b = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        location = relocation(); 
        //log("location success"); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    b.start(); 
    b.join(); 

    if (location.y>0) 
    { 

     location_home.x = 4.5f; 
     location_home.y = 4.5f; 
     location_home.theta = (float)Math.PI; 
    } else 
    { 
     location_home.x = -4.5f; 
     location_home.y = -4.5f; 
     location_home.theta = 0; 
    } 

Я использовал b.join(), чтобы подождать некоторое время, пока местоположение var не получит значение из перемещения, чтобы определить значение для location_home. Но это неправильно. thread b и если оператор выполняется одновременно. Помоги мне :(ТКС всехКак подождать, когда заканчивается нить

+1

использовать задачу асинхронной для этого – Pavya

ответ

0

я думаю, что было бы хорошо, если вы используете Asyntask в этом случае:

private class YourThread extends AsyncTask { 
    @Override 
    protected Object doInBackground(Object[] params) { 
     try { 
      location = relocation(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Object o) { 
     super.onPostExecute(o); 
     //log("location success"); 
     if (location.y > 0) { 
      location_home.x = 4.5f; 
      location_home.y = 4.5f; 
      location_home.theta = (float) Math.PI; 
     } else { 
      location_home.x = -4.5f; 
      location_home.y = -4.5f; 
      location_home.theta = 0; 
     } 
    } 
} 

и использовать его:

new YourThread().execute(); 
+0

Ты Отсутствует тип параметра в объявлении AsyncTask. –

+0

Теперь у вас есть несогласованные типы между объявлением и методами 'doInBackground()' и 'onPostExecute()'. –

Смежные вопросы