2017-09-11 4 views
0

내 활동 내에서 사용자 자격 증명을 확인하고 유효한 경우 세션 ID 및 관련 정보를 반환합니다. 메서드는 POST입니다. 매개 변수는 JSON으로 보내야합니다.BasicNetwork.performRequest 얻기 : 예기치 않은 응답 코드 400 (발리에 있음)

{ 
"params": { 
    "context": {}, 
    "db": "testing", 
    "login": "admin", 
    "password": "admin" 
    } 
} 

그래서 나는 된 JSONObject를 생성하고 Header.I 내가 그것을 호출 할 때 어떤 일이 나를 도와 is.Can로 난 오류가있어 어떤 POSTMAN.But에 반응을 얻고으로 같이 보내?

은 발리에서 RequestQueue을 보유하고 singletone 클래스 VolleyDispatcher를 만듭니다 : 여기

private void volleyLogin() throws JSONException { 
     mProgressView.setVisibility(View.VISIBLE); 
     JSONObject one = new JSONObject(); 
     one.put("context",new JSONObject()); 
     one.put("db","testing"); 
     one.put("login","admin"); 
     one.put("password","admin"); 
     JSONObject params = new JSONObject(); 
     params.put("params",one); 
     HashMap<String, String> header = new HashMap<String, String>(); 
     header.put("Content-Type", "application/json; charset=utf-8"); 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST, 
       ApiConstants.URL_AUTHENTICATE,params,header, new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
      System.out.println("Response"+response); 
      } 
     }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         System.out.println("VolleyError"+error); 

        } 
       } 

     ); 
     jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
       (int) TimeUnit.SECONDS.toMillis(120), 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     System.out.println("jsObjRequest"+jsObjRequest); 
     requestQueue.add(jsObjRequest); 
    } 

당신이 뭔가를 시도 할 수 있습니다 사용자 정의 요청 클래스

public class CustomRequest extends Request<JSONObject> { 

    private Response.Listener<JSONObject> listener; 

    private JSONObject jsonObjectParams; 
    private Map<String, String> headers; 

    public CustomRequest(int method,String url, JSONObject jsonObjectParams,Map<String, String> headers, 
         Response.Listener<JSONObject> reponseListener, Response.ErrorListener errorListener) { 
     super(method, url, errorListener); 
     this.listener = reponseListener; 
     this.jsonObjectParams = jsonObjectParams; 
     this.headers= headers; 
     System.out.println("method"+method); 
     System.out.println("url"+url); 
     System.out.println("jsonObjectParams"+jsonObjectParams); 


    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     return headers; 
    } 

    @Override 
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = new String(response.data, 
        HttpHeaderParser.parseCharset(response.headers)); 
      return Response.success(new JSONObject(jsonString), 
        HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 

    @Override 
    protected void deliverResponse(JSONObject response) { 
     // TODO Auto-generated method stub 
     listener.onResponse(response); 
    } 

    @Override 
    protected VolleyError parseNetworkError(VolleyError volleyError) { 

     if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){ 
      VolleyError error = new VolleyError(new String(volleyError.networkResponse.data)); 
      volleyError = error; 
     } 
     return volleyError; 
    } 

} 

답변

0

에게 있습니다. 그래서 지금 당신이 원하는 모든 시간을

public HttpURLConnection createHttpUrlConnection(URL url) throws IOException { 
     Log.d(TAG, "Create http url connection with url : " + url.toString()); 

     HttpURLConnection httpConnection = null; 
     if ("https".equalsIgnoreCase(url.getProtocol())) { 
      HttpsURLConnection https = (HttpsURLConnection) url.openConnection(); 
      https.setHostnameVerifier(DO_NOT_VERIFY); 
      httpConnection = https; 
     } else { 
      httpConnection = (HttpURLConnection) url.openConnection(); 
     } 

     httpConnection.setReadTimeout(TIMEOUT); 
     httpConnection.setConnectTimeout(TIMEOUT); 
     String basicAuth = "Basic " + new String(Base64.encode((AppConstants.USERNAME + ":" + AppConstants.PASSWORD).getBytes(), Base64.NO_WRAP)); 
     httpConnection.setRequestProperty("Authorization", basicAuth); 
     httpConnection.setRequestProperty("Accept-Language", Locale.getDefault().getLanguage()); 

     return httpConnection; 
    } 

: 어떤 발리슛을하기 전에

public RequestQueue getRequestQueue() { 
    if (requestQueue == null) { 
     // getApplicationContext() is key, it keeps you from leaking the 
     // Activity or BroadcastReceiver if someone passes one in. 
     requestQueue = Volley.newRequestQueue(mContext.getApplicationContext()); 
    } 

    return requestQueue; 
} 

/** 
* Recreates the request queue using username/password https auth. 
*/ 
public void recreateRequestQueue() { 
    if (!AppUtil.isEmpty(AppConstants.USERNAME) && !AppUtil.isEmpty(AppConstants.PASSWORD)) {//check if a user is logged in so that the https auth can be created if necessary 
     if (requestQueue != null) { 
      requestQueue.stop(); 
      requestQueue = null; 
     } 

     requestQueue = Volley.newRequestQueue(mContext.getApplicationContext(), new HurlCustomStack()); 
    } 

} 

public <T> void addToRequestQueue(Request<T> req) { 
    getRequestQueue().add(req); 
} 

통화 recreateRequestQueue는

사용자 정의 HurlStack

public class HurlCustomStack extends HurlStack { 

    @Override 
    protected HttpURLConnection createConnection(URL url) throws IOException { 
     // Workaround for the M release HttpURLConnection not observing the 
     // HttpURLConnection.setFollowRedirects() property. 
     // https://code.google.com/p/android/issues/detail?id=194495 
//  connection.setInstanceFollowRedirects(HttpURLConnection.getFollowRedirects()); 

     return HttpUrlConnectionHelper.getInstance().createHttpUrlConnection(url); 
    } 
} 

그리고 클라이언트 생성 방법을 구현 요청 요청을 하시려면에서 addToRequestQueue 방법을 사용하십시오.클래스.