【问题标题】:Volley Error for new Request Queue新请求队列的 Volley 错误
【发布时间】:2017-09-20 04:46:26
【问题描述】:

当我应用了一个使用谷库的简单代码时,我使用了谷歌示例“https://developer.android.com/training/volley/simple.html#simple

                RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
            String url ="http://www.google.com";

            // Request a string response from the provided URL.
            StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            // Display the first 500 characters of the response string.
                            message.setText("Response is: "+ response.substring(0,500));
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    message.setText("That didn't work!");
                }
            });
                // Add the request to the RequestQueue.
                     queue.add(stringRequest);

我得到以下错误。

E/Volley:[77336] NetworkDispatcher.run:未处理的异常 java.lang.NullPointerException:尝试从空对象引用上的字段“int java.lang.String.offset”读取 java.lang.NullPointerException:尝试从空对象引用上的字段“int java.lang.String.offset”读取 在 java.lang.String.compareToIgnoreCase(String.java:560) 在 java.lang.String$CaseInsensitiveComparator.compare(String.java:77) 在 java.lang.String$CaseInsensitiveComparator.compare(String.java:66) 在 java.util.TreeMap.find(TreeMap.java:277) 在 java.util.TreeMap.putInternal(TreeMap.java:240) 在 java.util.TreeMap.put(TreeMap.java:186) 在 com.android.volley.NetworkResponse.toHeaderMap(NetworkResponse.java:138) 在 com.android.volley.NetworkResponse.(NetworkResponse.java:0) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:169) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:113)

【问题讨论】:

  • 你能告诉我哪一行有错误(Logcat Pointing line)吗?
  • 其实我不知道你说的Pointing line是什么意思,就是我申请的时候出现的错误。

标签: java android rest api android-volley


【解决方案1】:

代码说你遇到了NullPointer exception

这意味着您在此代码中使用的变量在 运行时。

检查您的传递值是否为空。

this

【讨论】:

  • 我没有使用包含数据的变量,我正在尝试测试这个简单的请求!
【解决方案2】:

经过大量工作,我找到了解决方案,我在应用程序文件的依赖项中使用了来自 Github 的 volley 库,而不是使用“compile 'com.android.volley:volley:1.0.0'”。希望有人能解释一下为什么我不能使用 Github 的库。谢谢大家的帮助。

【讨论】:

    【解决方案3】:

    请从响应中删除子字符串:-

    message.setText("Response is: "+ response.substring(0,500));
    

    更改后:

       if(response.lemght>500){
            message.setText("Response is: "+ response.substring(0,500));
       }else{
    
            message.setText("Response is: "+ response);
       }
    

    试试这个 在创建 RequestQueue 时请传递上下文而不是 getApplicationContext():-

    RequestQueue queue = Volley.newRequestQueue(this);//if you are in activity, if you are in fragment then **getActivity()**
    

    【讨论】:

    • 应用更改后仍然出现相同的错误。
    • 有时 getApplicationContext 可能会返回 null 所以尝试将其更改为 this 或 getActivity()
    【解决方案4】:

    当您进行网络调用时,您可能会获得成功,但有时不会获得数据。因此,请确保在访问数据之前进行空检查。

    if(response!=null){
      message.setText("Response is: "+ response.substring(0,500));
    }
    

    【讨论】:

    • 还是一样,看来错误不是来自“响应”。
    • 是的,我就是这么说的。我解决了你的空指针问题..但是你没有得到响应数据并且你正在尝试设置它。这就是应用程序崩溃的原因
    • 您正在点击“google.com”并期待字符串响应?兄弟..如何尝试点击不同的 api 来为您提供字符串响应或 json 响应并尝试。或者如果可能的话检查改造库。它是一样的作为凌空但是新的
    • 我已经从服务器应用了我自己的 json 响应,但仍然有同样的问题,这个例子是我的 google 提供的!
    • 使用 Json gRequest 代替 StringRequest
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多