2015-05-17 65 views
0

我試圖用凌空像下面實現登錄:凌空ExecutionException當

public static JSONObject register(RequestQueue requestQueue, String url, HashMap<String, String> params) { 

    RequestFuture<JSONObject> requestFuture = RequestFuture.newFuture(); 
    CustomRequest customRequest = new CustomRequest(Request.Method.POST,url,params,requestFuture,requestFuture); 
    JSONObject response = null; 

    requestQueue.add(customRequest); 
    try { 
     response = requestFuture.get(30000, TimeUnit.MILLISECONDS); 
    } catch (InterruptedException e) { 
     L.m(e + ""); 
    } catch (ExecutionException e) { 
     L.m(e + ""); 
    } catch (TimeoutException e) { 
     L.m(e + ""); 
    } 
    return response; 
} 

但每當我發送請求我得到空值作爲響應。網絡API調用的工作原理,它創建的用戶,但我不能象重複的用戶名錯誤的情況下獲得JSON結果等

參數爲:

網址:http://localhost:13480/api/Account/Register 的Hashmap:(如JSON):

{ 「電子郵件」: 「管理@管理」, 「密碼」: 「Password12」, 「ConfirmPassword」: 「Password12!」 }

和自定義請求是在這裏: Volley - POST/GET parameters 所以我無法弄清楚什麼是錯的。任何幫助?

+0

請參閱我的回答,其中解釋了什麼是您的代碼worng。 – AnixPasBesoin

+0

Merci,我會看看並嘗試。 – hibbault

+0

是的,它有幫助,但在我的情況下,它有點複雜,我有一些額外的抽象層。我會弄清楚:) – hibbault

回答

0

TL,DR。該聲明return response;是錯誤的。

你試圖在得到它之前返回你的響應(異步調用)。

事實是,凌空做的異步請求,所以請求之前,服務器D是,這就是爲什麼你所得到的迴應是您的通話將結束它的運行。

這裏是一個類的子集,我寫的,可以幫助您瞭解如何使用凌空正確:

public class SubsetClass { 

    private Context context; 
    String serverURL; 

    public SubsetClass(Context context) { 
     this.context = context; 
     serverURL = context.getResources().getString(R.string.serverURL); 
    } 

    private void genericPOSTRequest(Map<String, String> parameters, Response.Listener<String> responseListener, Response.ErrorListener errorListener) { 
     GenericRequest gen = new GenericRequest(); 
     gen.makePOSTRequest(parameters, responseListener, errorListener); 
    } 

    private void genericGETRequest(Map<String, String> parameters, Response.Listener<String> responseListener, Response.ErrorListener errorListener) { 
     GenericRequest gen = new GenericRequest(); 
     gen.makeGETRequest(parameters, responseListener, errorListener); 
    } 

    private class GenericRequest { 

     private void makePOSTRequest(final Map<String, String> parameters, Response.Listener<String> responseListener, Response.ErrorListener errorListener) { 
      RequestQueue queue = Volley.newRequestQueue(context); 
      StringRequest stringRequest = new StringRequest(Request.Method.POST, serverURL, 
        responseListener, errorListener) { 
       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        return parameters; 
       } 
      }; 
      queue.add(stringRequest); 
     } 

     private void makeGETRequest(final Map<String, String> parameters, Response.Listener<String> responseListener, Response.ErrorListener errorListener) { 
      RequestQueue queue = Volley.newRequestQueue(context); 
      StringRequest stringRequest = new StringRequest(Request.Method.GET, serverURL, 
        responseListener, errorListener) { 
       @Override 
       protected Map<String, String> getParams() throws AuthFailureError { 
        return parameters; 
       } 
      }; 
      queue.add(stringRequest); 
     } 
    } 
} 

相關問題

Volley - POST/GET parameters

0

嘗試使用這個代替

JsonObjectRequest jr = new JsonObjectRequest(Request.Method.POST, url, params, new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     // handle the response here 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 

    } 
}); 

    requestQueue.add(jr);