Win10에서 Android Studio 3.0.1로 만든 Android 앱에서 간단한 발리 요청을하려고합니다. A NullPointerException
은 API 26이 장착 된 Nexus 5X 에뮬레이터에서 발리 요청을 할 때 발생합니다.Volley throws NullPointerException 인터페이스 메소드 writeRequestHeaders()
동일한 문제가있는 다른 사람을 찾지 못했지만 새로운 문제를 생성하여 문제가 다시 발생했습니다. 프로젝트를 만들고 복사하여 활동 코드를 붙여 넣으십시오. 어떤 도움을 주시면 감사하겠습니다. 여기
는 스택 추적입니다 :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은 인터넷 권한을 가지고 있으며, 내 build.gradle 파일은 최신 발리 라이브러리에 대한 종속성이 있습니다
이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'
}
고독한 활동이를 버튼을 누르면 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();
}
}
요지는 오래된 것 같습니다. 코드를 실행하려 할 때'client.open '에 대한 호출이 정의되어 있지 않다고 불평했습니다. 해결 방법을 사용하고 싶지 않습니다. Android 문서에서 의도 한대로 Volley 라이브러리를 사용하고 싶습니다. – tronman