我试图通过在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();
}
}
试试这个https://gist.github.com/JakeWharton/5616899。创建类并传递第二个param.Check是否有效。
难以置信的。事实证明,我在清单中的权限行末尾有一个迷路空间。
<uses-permission android:name="android.permission.INTERNET "/>
本来应该
<uses-permission android:name="android.permission.INTERNET"/>
为什么没有关于缺少INTERNET权限的抱怨,我不知道。