Volley抛出NullPointerException调用接口方法writeRequestHeaders()

问题描述 投票:0回答:2

我试图通过在Win10上使用Android Studio 3.0.1创建的Android应用程序发出一个简单的Volley请求。当我在使用API​​ 26的Nexus 5X仿真器上运行时发出一个Volley请求时,会抛出NullPointerException

我没有找到其他人遇到同样的问题,但我通过创建一个新项目并复制粘贴活动代码重新创建了这个问题。任何帮助,将不胜感激。

这是堆栈跟踪:

12-29 13:56:19.839 26070-26204/com.test.myapp E/Volley: [773] NetworkDispatcher.processRequest: Unhandled exception java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.okhttp.internal.http.HttpStream.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference
      java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.okhttp.internal.http.HttpStream.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference
   at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:593)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
   at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseMessage(HttpURLConnectionImpl.java:534)
   at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.trackResponse(TrackedHttpURLConnection.java:86)
   at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.tryTrackResponse(TrackedHttpURLConnection.java:101)
   at com.android.tools.profiler.support.network.httpurl.TrackedHttpURLConnection.getResponseCode(TrackedHttpURLConnection.java:308)
   at com.android.tools.profiler.support.network.httpurl.HttpURLConnection$.getResponseCode(HttpURLConnection$.java:92)
   at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:99)
   at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:131)
   at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
   at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
12-29 13:56:19.846 26070-26070/com.test.myapp E/test: That didn't work! com.android.volley.VolleyError: java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.okhttp.internal.http.HttpStream.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference

AndroidManifest.xml具有INTERNET权限,我的build.gradle文件依赖于最新的Volley库:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.volley:volley:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

单独的活动有一个按钮,当按下该按钮时,使用从Android Volley doc复制粘贴的代码生成Volley请求:

package com.test.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends AppCompatActivity {

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

    private void makeRequest() {
        RequestQueue queue = Volley.newRequestQueue(this);
        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.
                        Log.d("test", "Response is: "+ response.substring(0,500));
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("test","That didn't work! " + error);
            }
        });
        // Add the request to the RequestQueue.
        queue.add(stringRequest);
    }

    public void buttonClick(View view) {
        makeRequest();
    }
}
android android-volley
2个回答
0
投票

试试这个https://gist.github.com/JakeWharton/5616899。创建类并传递第二个param.Check是否有效。


0
投票

难以置信的。事实证明,我在清单中的权限行末尾有一个迷路空间。

<uses-permission android:name="android.permission.INTERNET "/>

本来应该

<uses-permission android:name="android.permission.INTERNET"/>

为什么没有关于缺少INTERNET权限的抱怨,我不知道。

© www.soinside.com 2019 - 2024. All rights reserved.