2016-03-26 2 views
-2

私のメソッドcheckInvited()からブール値を返そうとしています。このメソッドには、AsyncTask<Void,Void,String>を継承するクラスが含まれます。これは完全な方法AsyncTaskを拡張するクラスを含むメソッドから値を返すことができません

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; 
} 

あり、この方法は、PHPを介しsendPostRequest()と接触するMySQLデータベースの事前定義されたメソッドを呼び出します。私の問題は、trueまたはfalseを返すようにcheckInvited()メソッドを取得しています。現在のところ、結果の少なくとも1つが真でなければならないことがわかっている場合にのみ、falseを返します。

ご協力いただきありがとうございます。

+4

AsyncTaskの定義は、非同期に実行されることです。あなたはAsyncTaskが完了する前に偽を返しています(たぶん起動していても) –

+0

メソッド内でクラスを定義しないでください... – hehe

答えて

0

非同期タスクは別々のスレッドで実行されるため、厄介な要因によっては実行に時間がかかる可能性があるため、falseを返すだけです。非同期タスクが完了する前でも値を返しています。

doPostExecuteはdoInBackgroundの完了後に実行されるため、onPostexecuteのtrueまたはfalseを必要とするメソッドを呼び出すことをお勧めします。

関連する問題