2016-09-28 11 views
0

Log.dは常に文字列を表示しますが(初めての場合もあります)、ブール値は2回目以降にのみ要求されます。私はブール値が真であることを最初にしたい。なぜAndroid Volleyが初めて動作しないのですか?

StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_UPDATE, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        //do stuffs with response of post 
        Log.d("Bien:",response.substring(0)); 
        correctoExterna = true; 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        //do stuffs with response erroe 
        correctoExterna = false; 
       } 
      }){ 
     @Override 
     protected Map<String,String> getParams(){ 
      Map<String,String> params = new HashMap<String, String>(); 
      params.put("consulta",consultaExterna); 
      return params; 
     } 

    }; 
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
    requestQueue.add(stringRequest); 
    if(correctoExterna) snackBar(); 

答えて

0

あなたの実装では、コールバックがまだ起動しませんでしたので、あなたのcorrectoExternaがまだ変更されていないことを意味する非同期です。あなたはたぶん、あなたが配置する必要がFutureRequest

RequestFuture<String> future = RequestFuture.newFuture(); 
StringRequest request = new StringRequest(Request.Method.POST, URL_UPDATE, future, future){ 
    @Override 
    protected Map<String,String> getParams(){ 
     Map<String,String> params = new HashMap<String, String>(); 
     params.put("consulta",consultaExterna); 
     return params; 
    } 
}; 
RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
requestQueue.add(request); 

try { 
    String response = future.get(); 
    Log.d("Bien:",response.substring(0)); 
    correctoExterna = true; 
} catch (InterruptedException | ExecutionException e) { 
    correctoExterna = false; 
} 

if(correctoExterna) snackBar(); 
+0

ありがとう@Enzokieあなたの返信はAsynctask +インターフェイスでうまくいきます。どうもありがとうございました。 これでJsonObjectRequestが必要になり、paramsに問題があります。応答は常に間違ったメッセージを送信します。 – user3523942

+0

@ user3523942ようこそ – Enzokie

0

使用同期的に実装する必要がある場合は、「もし(correctoExterna)スナックバーを();」 "public void onResponse(String response)"内の "correctoExterna = true;"の後ろの

RequestQueueにStringRequestを追加するとバックグラウンドスレッドで実行されるため、if(correctoExterna)snackBar();を実行すると、onResponseコールバックメソッドが呼び出されないことがあります。

関連する問題