android - Volley JsonObjectRequest 在 GET 请求中发送 header

标签 android android-volley

我正在尝试从 GET 请求发送一些身份验证 header ,我尝试使用 Volley JsonObjectRequest 调用:

Map<String,String> params=new HashMap<String,String>();
        params.put("token","fghjbvjhnjjk");
        activity.showDialog();
        JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET,url,
                new JSONObject(params), new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(tag, response.toString());
                activity.hideDialog();
                try {
                    activity.onRequestServed(response, code);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(tag, "Error: " + error.getMessage());
                Log.e(tag, "Site Info Error: " + error.getMessage());
                Toast.makeText(activity.getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                activity.hideDialog();
                try {
                    activity.onRequestServed(null,code);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
        req.setShouldCache(true);

但它显示:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
        at com.android.volley.Request.<init>(Request.java:136)
        at com.android.volley.toolbox.JsonRequest.<init>(JsonRequest.java:58)
        at com.android.volley.toolbox.JsonObjectRequest.<init>(JsonObjectRequest.java:47)

我在某处读到,您可以通过制作 hashmap 来传递 header ,从而使用该参数创建一个新的 JsonObject。也许这将适用于 POST 请求。请帮助..

最佳答案

嗯,事情很简单,也很精确。将 header 传递给 GET 或 POST 请求,您需要重写 JsonObjectRequest 类中的 getHeaders 方法。它将如何完成:

JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET,url,
                null, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(tag, response.toString());
                activity.hideDialog();
                try {
                    activity.onRequestServed(response, code);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(tag, "Error: " + error.getMessage());
                Log.e(tag, "Site Info Error: " + error.getMessage());
                Toast.makeText(activity.getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                activity.hideDialog();
                try {
                    activity.onRequestServed(null,code);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }) {

            /**
             * Passing some request headers
             */
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                //headers.put("Content-Type", "application/json");
                headers.put("key", "Value");
                return headers;
            }
        };

关于android - Volley JsonObjectRequest 在 GET 请求中发送 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218464/

相关文章:

android - Google 的 Android Duo 应用程序支持哪些 Intent 或 API?

android - 如何为 Google Play Developers API 生成刷新和访问 token

java - 什么是IndexOutOfBoundsException?我该如何解决?

android - 如何获得网络响应,即使状态代码不是 200

android - phonegap android build成功后APK文件存储在哪里?

android - 土耳其语的 Amazon Web Services (AWS) Lambda 规范化错误

java - 将 JsonObject 在 POST 中从 android 发送到服务器

java - 从 JSON 或 XML 提要导入数据并在 Android 中创建列表

java - 使用 volley 库获取具有整数的 json

android - Volley 或 ASyncTaskLoader