2016-03-26 25 views
-2

'u genişleten bir sınıftan gelen yöntemden değer döndüremiyor Benim yöntem checkInvited() yönteminden bir boole döndürmeye çalışıyorum. Bu yöntem, AsyncTask<Void,Void,String>'u genişleten bir sınıf içerir. Bu tam yöntemAsyncTask

public boolean checkInvited(String player_id){ 

    final String g_id = game_id; 
    final String fr_id = player_id; 

    class CheckInvited extends AsyncTask<Void, Void, String>{ 
     boolean invited; 
     ProgressDialog loading; 
     @Override 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
      loading = ProgressDialog.show(InviteFriends.this,"Checking Invite Status","Please Wait...",false,false); 
     } 

     @Override 
     protected void onPostExecute(String s){ 
      super.onPostExecute(s); 
      loading.dismiss(); 
      JSON_STRING = s; 
      if (s.trim().equals("0")){ 
       invited = false; 
      } else { 
       invited = true; 
      } 

     } 

     @Override 
     protected String doInBackground(Void... params){ 

      HashMap<String, String> hashMap = new HashMap<>(); 
      hashMap.put(Config.KEY_INVITES_GAME_ID, g_id); 
      hashMap.put(Config.KEY_INVITES_PLAYER_ID, fr_id); 

      RequestHandler rh = new RequestHandler(); 
      String s = rh.sendPostRequest(Config.URL_CHECK_INVITED, hashMap); 
      return s; 
     } 
    } 
    CheckInvited ci = new CheckInvited(); 
    ci.execute(); 
    return ci.invited; 
} 

Bu yöntem hangi kişilerin mySql veritabanı php ile sendPostRequest() önceden tanımlanmış bir yöntem çağırır olduğunu. Benim sorunum doğru veya yanlış dönmek checkInvited() yöntemi oluyor. Şu anda sonuçların en az birinin doğru olması gerektiğini bildiğim zaman yanlış geri dönecektir.

Yardımlarınız için şimdiden teşekkür ederiz.

+4

AsyncTask'ın tanımı, zaman uyumsuz olarak çalışmasıdır. AsyncTask'ın –

+0

'u bile bitirmeden (belki de başladı) önce yanlış bir şekilde dönüyorsunuz, lütfen bir metodun içinde sınıf tanımlamayın ... – hehe

cevap

0

Eşzamansız bir iş parçacığı içinde çalıştığı ve dikkat çekici etkenlere bağlı olarak yürütülmesi uzun sürebileceğinden, yalnızca false döndürür. Eşzamansız görev tamamlanmadan bile değer döndürüyorsunuz.

OnPostExecute, doInBackground tamamlandıktan sonra çalıştırıldığı için true veya false onPostexecute değerini gerektiren bir yöntemi çağırmanızı öneririm.