当前位置: 首页 > 知识库问答 >
问题:

JSON GET请求上的java.lang.NullPointerException

钮高朗
2023-03-14

我试图发送一个GET请求,传递一个身份验证令牌头以获取一些JSON数据,但是我得到了所有的java.lang.NullPointerExceptions。我已经尝试使用JSONObjectRequest、JSONArrayRequest甚至StringRequest。

下面是代码(JSONObjectRequest和JSONArrayRequest对测试进行了注释):

 public void getJSON() {

    final String authToken = getAuth();
    String novaURL = getNova();
    novaURL = novaURL+"/servers";


    /**
___________________________________________________________________
    JsonArrayRequest getRequest = new JsonArrayRequest(novaURL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d("Nova", response.toString());
                    setNovaJSON(response.toString());
                }
            }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            VolleyLog.d("Nova", "Error: " + error.getMessage());
            }
    }
    ){
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("X-Auth-Token", authToken);
            params.put("Accept", "application/json");
            params.put("Content-Type", "application/json; charset=utf-8");
            return params;
        }
    };


    RequestQueue queue = Volley.newRequestQueue(this);
    queue.add(getRequest);

}

    JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, novaURL, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray servers = response.getJSONArray("servers");
                    } catch (JSONException e) {
                        Toast.makeText(getApplicationContext(), "Error to get Instances", Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }

                    Log.d("Nova", response.toString());
                    setNovaJSON(response.toString());
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("Nova", "Error: " + error.getMessage());

                }
            }
    ) {
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("X-Auth-Token", authToken);
            params.put("Accept", "application/json");
            params.put("Content-Type", "application/json; charset=utf-8");
            return params;
        }

    };
 ________________________________________________________________ **/

    StringRequest getRequest = new StringRequest(Request.Method.GET,
            novaURL, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d("Nova", response.toString());
            setNovaJSON(response.toString());


        }
    }, new Response.ErrorListener() {

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

    RequestQueue queue = Volley.newRequestQueue(this);
    queue.add(getRequest);

}
RequestQueue queue = Volley.newRequestQueue(this);

我可能找到了有用的东西。我移动了行“requestqueue queue=volley.newrequestqueue(this);”在方法的顶部,使用其他变量声明,并且在调试之后,它似乎在到达JSONObjectRequest或StringRequest命令之前就崩溃了。好像排队有问题。

**更新2:

我按照以下步骤修复了队列问题:https://developer.android.com/training/volley/requestqueue.html

java.lang.NullPointerException
        at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
        at org.json.JSONTokener.nextValue(JSONTokener.java:94)
        at org.json.JSONObject.<init>(JSONObject.java:155)
        at org.json.JSONObject.<init>(JSONObject.java:172)

共有1个答案

单于海荣
2023-03-14

似乎volley.NewRequestQueue(this)的“this”是null。

 类似资料:
  • 问题内容: 我有一个函数,在输入更改时运行ajax调用。 但是,有可能在之前的ajax调用完成之前再次触发该函数。 我的问题是,在开始新的ajax调用之前,我将如何中止它?不使用全局变量。(请参阅此处的类似问题的答案) 我当前代码的jsfiddle: Javascript: HTML: 问题答案:

  • 这部分文档描述了在 Flask 0.7 中的行为,与旧的行为基本一致,但有细小微妙的 差异。 这里推荐先阅读 应用上下文 章节。 深入上下文作用域 比如说你有一个应用函数返回用户应该跳转到的 URL 。想象它总是会跳转到 URL 的 next 参数,或 HTTP referrer ,或索引页: from flask import request, url_for def redirect_url

  • 我有2个微服务(A和B)。 有一个接受POST请求的endpoint。当用户发出发布请求时,会发生以下情况: 服务A从POST请求正文中获取对象并将其存储在数据库中。 服务A将对象转换为不同的对象。新对象通过泽西HTTP客户端发送到服务B。 步骤 2 发生在我创建的 Java 线程池(Executors.new缓存线程池)上。通过在新线程上执行步骤 2,服务 A 的终结点的响应时间不受影响。 但是

  • 再一次在布罗斯沃尔,一切都很完美。在PhoneGap应用程序上仅GET request有效

  • 我有一个具有OAuth2授权的Spring Cloud应用程序: 我添加了这个安全配置: github:https://github.com/rcbandit111/OAuth2/blob/master/src/main/java/org/engine/security/WebSecurityConfig.java 打开Angular应用程序时,出现访问错误: 您知道我需要应用什么配置才能在没有强

  • 我正在尝试一些非常简单的方法,但由于某些原因它不起作用: 启动index.html时出现的错误: 无法加载文件:///e:/dev/eclipse/syrilab/pages/header.html:跨源请求仅支持协议方案:http、data、chrome、chrome-extension、HTTPS。 无法加载文件:///e:/dev/eclipse/syrilab/pages/home.htm