2016-03-31 5 views
1

ユーザーが投稿を好きであるかどうかをチェックしたいので、この関数を書きましたので、booleanの値を返す必要があります。どんなトリックまたはヒントも高く評価されます。 ありがとうございました。グローバル変数を持つ内部クラス

public boolean ImLike (String Url) 
{ // Check If user Like The Post Before 
    requestQueue = Volley.newRequestQueue(context); 
    requestQueue.start(); 
    final boolean[] flag = new boolean[1]; 
    StringRequest request = new StringRequest(Request.Method.GET, Url, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      if (response.equals("yes")) { 
       flag[0] =true; 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("Vollley Error", "Error "); 
     } 
    }); 
    requestQueue.add(request); 
    Log.e("Flag",flag[0]+""); 
    return flag[0]; 
} 
+0

戻り値voidレスポンスを待機するリスナーを渡します。 – zgc7009

+0

@ zgc7009解決策は正しくこの[クラス](https://drive.google.com/file/d/0B0el4AZQaRJtV0tDNDVwLUhLdzQ/view?usp=sharing)で実行されません。 –

答えて

2

この操作を行います。

を私たちは私たちの応答を聞くことができるように

下の編集は、リスナー・インターフェースを作成して参照してください。

public interface RequestResponseListener{ 
    void onResponse(boolean posted); 
} 

メソッドを変更して、リスナーパラメータを組み込み、そのリスナーを使用して応答を送信します。

public void imLike (String url, final RequestResponseListener listener){ 
    requestQueue = Volley.newRequestQueue(context); 
    requestQueue.start(); 
    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
       listener.onResponse(response.equals("yes"))); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("Vollley Error", "Error "); 
      listener.onResponse(false); 
     } 
    }); 
    requestQueue.add(request); 
} 

次に、応答を聞くために電話をかけます。

imLike([some_url], new RequestResponseListener(){ 
    @Override 
    public void onResponse(boolean posted){ 
     // do what you wanted to do with the response 
    } 
}); 

Listenersの基本概念です。マルチスレッド/非同期タスクに非常に便利です。

EDIT

私は私が実際にもう少し答えていたものを見てきたはずです。あなたはボレーのリクエストをしており、ボレーは独自のリスナーを提供しています。あなたがする必要があるのはこれです。

public void imLike(String url, Response.Listener<String> listener, Response.ErrorListener errorListener){ 
    requestQueue = Volley.newRequestQueue(context); 
    requestQueue.start(); 
    StringRequest request = new StringRequest(Request.Method.GET, url, listener, errorListener); 
    requestQueue.add(request); 
} 

し、また、あなたが新しいキューにあなたがこれを行うたびに作成しているとして、あなたはおそらく、別の方法であなたのVolleyQueueを初期化処理することが注目されるように

imLike([some_url], new Response.Listener<String>(){ 
     @Override 
     public void onResponse(String response) { 
      if(response.equals("yes")){ 
       // do what you want if it is yes 
      } 
      else{ 
       // do what you want if it is no 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
     Log.e("Volley Error", "Error "); 
     } 
    } 
} 

として要求を行いますコール。実際にキューを作成するには、アプリケーションのインスタンスを1つ用意する必要があります。

+0

ハハ正直、私は質問に注意を払っていない@ cricket_007私はちょうど質問を見た。私はこれを解決します。 – zgc7009

+0

型をオーバーライドしたい場合は、あなたが持っていることを行うことができますが、コールバック内の文字列を解析するだけで、よりクリーンに見えると思います。 –

+0

@ cricket_007追加編集、ありがとうキャッチ – zgc7009