2015-07-13 3 views
3
public String newUser = "false"; 
public double lat = 0.0, lon = 0.0; 

У меня есть следующие функции в моем андроида приложения (вызывается при нажатии кнопки), которая начинается поток:резьбы не правильно завершение, я думаю

public void SignUpFunction(View view) { 
    assignValues(); 
    String filledAll = checkIfFilled(); 
    if (filledAll.equals("true")) { 
    Log.d("LIFECYCLE", "calling thread.."); 

    //my thread 
    new validateThread().start(); 

    Log.d("After thread start","This log call does not occur"); 

    if (newUser.equals("true")) { 
     Toast.makeText(this, "Please wait as we obtain your location", Toast.LENGTH_SHORT).show(); 
     getMyLocationFunction(); 
     } else { 
      return; 
     } 
    } 
} 

validateThread:

class validateThread extends Thread { 
    public void run() { 
     Log.d("LIFECYCLE", "validateThread entered..."); 
     try { 
         newUser = "true"; 
         Log.d("validateThread", "Validated and found new user"); 
     } catch (Exception e) { 
      Log.d("validateThread", "Exception in validateThread: " + e.getMessage()); 
     } 
    } 
} 

Поток работает правильно ... но после последней строки он не возвращается к начальной точке. Я не понимаю, почему это происходит, потому что я использовал потоки раньше, и все они работают правильно.

Я знаю, что могу просто дать функцию getMyLocation внутри потока, но мне это действительно нужно.

Я искал похожие вопросы, но никто не помог .. Что я здесь делаю неправильно? Спасибо заранее.

+0

Что вы подразумеваете под словом «он не возвращается к своей точке начала»? вы ожидаете 'if (newUser.equals (" true "))' 'быть' true', потому что вы устанавливаете его как таковой в потоке? – takecare

+1

Резьбы параллельны друг другу. Вы можете переключатель 'если (newUser.equals ("истина"))' к 'делать { ... } в то время как (! NewUser.equals ("истина"))' –

+0

На самом деле я не разместил здесь весь контент. Независимо от того, какое заявление я даю там (даже оператор «Log» вместо «if») не выполняется. – aashima

ответ

2

Это гонка. SignUpFunction должен ждать, пока validateThread решит, следует ли устанавливать newUser = "true". Даже с гонкой ваш код может работать иногда, но это случайно.

+0

Если бы это было так, если я дал инструкцию Log после запуска потока, это должно было сработать правильно. Но этого не произойдет. – aashima

+0

Возможно, log.d выбрал исключение. Примечание: это не ответ, потому что вы действительно не задавали вопрос. Общий комментарий: удалите код из вашей программы до тех пор, пока что-то не сработает, а затем добавьте код обратно, пока не увидите эффект, который вы впервые описали. Затем удалите ненужный код до тех пор, пока не исчезнет проблема. Я бы предложил преобразовать все ваши строки журнала ... в println или аналогичные. Во время этого процесса вы, скорее всего, уже нашли свою проблему. Если нет, то отредактируйте свой вопрос. – user1110743