GET on Volley时如何发送请求头是“Content-Type”:“application/json”

新手上路,请多包涵

我尝试在 Volley 上使用 GET,但我需要向 application/json 发送请求。

我查看了一些答案,我尝试使用 jsonBody ,但它显示错误:

空 com.android.volley.ServerError

这是我的代码:

 public class MainActivity extends AppCompatActivity {

    String url = "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews";
    JSONObject jsonBody;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            //I try to use this for send Header is application/json
            jsonBody = new JSONObject("{\"type\":\"example\"}");
        } catch (JSONException ex) {
            ex.printStackTrace();
        }

        RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody,
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("TAG", response.toString());
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("TAG", error.getMessage(), error);
            }

        });

        mQueue.add(jsonObjectRequest);

    }

}

有没有人可以教我如何解决这个问题,我们将不胜感激。

这是我的网址: String url = "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews";

原文由 Morton 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 835
2 个回答
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> params = new HashMap<String, String>();
    params.put("Content-Type", "application/json");
    return params;
}

在你的实施

public class MainActivity extends AppCompatActivity {

    String url = "http://114.35.246.42:2212/MobileApp/DEST_WebService.asmx/GetNews";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("TAG", response.toString());
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("TAG", error.getMessage(), error);
                }
            }) { //no semicolon or coma
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Content-Type", "application/json");
                return params;
            }
        };
        mQueue.add(jsonObjectRequest);
    }
}

原文由 Mukeshkumar S 发布,翻译遵循 CC BY-SA 3.0 许可协议

一般来说,要设置自定义标头,您需要覆盖 getHeaders 并手动设置自定义标头。但是,volley 以不同方式处理内容类型标头,并且 getHeaders 方式并不总是有效。

因此,对于您的情况,您需要覆盖 getBodyContentType 。所以你的代码看起来像

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, jsonBody,new Response.Listener<JSONObject>() {

@Override
public void onResponse(JSONObject response) {
   Log.d("TAG", response.toString());
}, new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("TAG", error.getMessage(), error);
        }

    }){
         @Override
         public String getBodyContentType(){
              return "application/json";
         }
    };

原文由 ashkhn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题