2017-08-31 48 views
1

私は、ボレーライブラリを使用してウェブサービスを打っています。それはアンドロイドでボレーのポストリクエストでヘッダーを添付できません

 JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, 
      url, 
      new Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        Log.e("response", response.toString()); 
        pDialog.hide(); 

       } 
      }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.e("Error: " + error.getMessage()); 
      Toast.makeText(getActivity(), R.string.txt_error_occured, Toast.LENGTH_LONG).show(); 
      pDialog.hide(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("policyNo", policyNo); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/x-www-form-urlencoded"); 
      params.put("Content-Type", "application/json; charset=utf-8"); 
      params.put("User-agent", "My useragent"); 
      return params; 
     } 

    }; 

//リクエストを追加すると要求するため

//コード:このライブラリでは、すなわち「ヌルonErrorResponseを」私がリクエストを投稿するヘッダを添付する必要がありますが、Webサービスを叩きながら、私はエラーを取得していますキュー AppController.getInstance()。addToRequestQueue(jsonObjReq、tag_json_obj);

+0

に動作しますか? –

+0

このようにしてみてください。 'JsonObjectRequest'の代わりに' StringRequest'を使用し、パラメータに 'Content-Type'を追加しないで、値に必要なパラメータだけを渡します。ときどきレスポンスがjsonの文字列になると、初心者はJSONを使わなければならないと思うが、通常の 'StringRequest'が必要になるはずです。 –

答えて

0

ボレーを使用する必要がありますか?むしろRetrofitに切り替えることができます。それは最高と最高のネットワーキングライブラリの一つです。

https://futurestud.io/tutorials/retrofit-add-custom-request-header

私は5年前にこのコードを使用していたが、体の内側J =生のJSONを送っていると完璧に働いていました。一度これをチェックしてください。ここで

public void updateUserData(final String jsonObject) { 
     // Tag used to cancel the request 
     showProgressDialog(); 
     String tag_string_req = "string_req"; 
     String url = Const.UPDATE_USER_HISTORY; 


     final StringRequest strReq = new StringRequest(Request.Method.POST, 
       url, new Response.Listener<String>() { 

      @Override 
      public void onResponse(String response) { 
       hideProgressDialog(); 
       Log.d(TAG, response.toString()); 

       FragmentManager fm = getActivity().getSupportFragmentManager(); 
       FragmentTransaction transaction = fm.beginTransaction(); 
       if (offer) { 
        Intent intent = new Intent(getActivity(), TabsActivity.class); 
        getActivity().startActivity(intent); 
        getActivity().finish(); 
       } else { 
        fm.popBackStack("quiz2", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
        fm.popBackStack("quiz1", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
        fm.popBackStack("app", FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       } 
//    transaction.commit(); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hideProgressDialog(); 
      } 
     }) { 
      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> header = new HashMap<>(); 
       header.put("Content-Type", "application/json; charset=utf-8"); 
       return header; 
      } 


      @Override 
      public String getBodyContentType() { 
       return "application/json; charset=utf-8"; 
      } 

      @Override 
      public byte[] getBody() throws AuthFailureError { 
       try { 
        return jsonObject.getBytes("utf-8"); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 

     }; 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
    } 
+0

答えは 'StringRequest'を示し、opは' JSONObjectRequest'を要求しています –

+0

あなたはそれをjsonobjectに後で変換することはできません。 JsonObjectのresponseObject =新しいJsonObject(stringResponse); –

0

あなたはバレーボールPOSTリクエストにヘッダを追加することができる方法です:

final HashMap<String, Object> postParams = new HashMap<String, Object>(); 
postParams.put("KEY_1", "VAL_1"); 
postParams.put("KEY_2", "VAL_2"); 

JsonObjectRequest mRequestEkyc = new JsonObjectRequest(Request.Method.POST, 
     "your_url_comes_here", new JSONObject(postParams), 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       DisplayUtils.dismissDialog(mContext); 
       //parseResponse(response); 
      } 
     }, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     DisplayUtils.dismissDialog(mContext); 
     DisplayUtils.displayToast(mContext, error.getMessage()); 
    } 
}) { 
    /** 
    * Passing request headers 
    * */ 
    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("KEY_1", "VAL_1"); 
     return headers; 
    } 

}; 


final int timeoutMilliseconds = 300000; 
mRequestEkyc.setRetryPolicy(new DefaultRetryPolicy(timeoutMilliseconds, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
ApplicationController.getInstance().addToRequestQueue(mRequestEkyc); 

希望、これはあなたがそのエラーが原因ヘッダのある知っていますかあなたのため

関連する問題