2015-08-24 6 views
0

У меня проблема с тем, что я не могу проверить значение результата AsyncTask, чтобы начать новую активность, если желателен результат.не удалось проверить результат AsyncTask

Вот мой onPostExecute метод:

@Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show(); 
     } 

Это поджаривает значение строки из файла PHP и имеет два возможных значения, «Вы успешно вошли в систему» ​​или «Неправильный адрес электронной почты или пароль». Все работает нормально, пока я не хочу проверить, что такое тосты, потому что, если логин успешно, мне нужно начать новую деятельность.

Это, как я пытался сделать это:

 public void onClick(View v) { 
      AttemptLogin login = new AttemptLogin(); 
      try { 
       String res = login.execute("http://10.0.2.2/loginApp.php").get(); 
       if (res.equals("You are successfully logged in")) 
         startActivity(new Intent(LoginActivity.this,ConnectActivity.class));                    
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       e.printStackTrace(); 
      } 

     } 

Я совершенно запутался, потому что, когда я тост Реза, я получаю желаемое сообщение, так что проблема с этой линией, если (res.equals («Вы успешно вошли в систему»)). Приложение ведет себя так, как будто эта строка вообще не существует.

Я также пробовал с if (AsyncTask.getStatus() == FINISHED), а затем проверить результат AsyncTask, но это не помогло.

У меня действительно нет идеи, что происходит, может ли кто-нибудь помочь мне с этим?

+0

никогда не EVER! используйте '.get()' с задачей async, которая блокирует поток ui. Если вы хотите получить что-то из задачи async, используйте 'onPostExecute' или создайте обратный вызов, который запускается, когда ваша задача асинхронна завершена. – tyczj

+0

Переместите' if (res.equals («Вы успешно вошли в систему»)) 'condition в' onPostExecute' а также удалить метод 'get()'. вероятно, проблема возникает из-за лишнего пробела в строке, поэтому попробуйте использовать 'contains' вместо' equals' –

+0

Содержит работу, и я удалил условие в onPostExecute, как вы и Pier сказал. Большое спасибо. Я не могу поверить, что я потратил столько времени, пытаясь исправить это, и я не придумал, чтобы использовать contains вместо equals. Это довольно разочаровывает, но я все еще очень новичок в программировании adnroid, надеюсь, я улучшусь. Еще раз спасибо – MarkoDj

ответ

1

AsyncTask имеет методы OnPostExecute и OnPreExecute. Оба они могут вызывать элементы, переменные и методы, как если бы они были обычными способами.

Так что в вашем onPostExecute вы можете легко проверить результат и начать деятельность с помощью этого:

@Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(); 
     try { 

      if (s.equals("You are successfully logged in")){ 
       Intent i = new Intent(LoginActivity.this,ConnectActivity.class); 
       startActivity(i); 
      }                    
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
     Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show(); 
    } 
+0

Спасибо, что ответили мне, я переместил условие в onPostExecute и с использованием содержит вместо него то, что он отлично работает – MarkoDj

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