2017-12-29 42 views
0

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(); 
    } 
} 

답변

0

믿을 수 없습니다. 내가 매니페스트의 허가 줄 끝 부분에 방황 한 공간이 있음이 드러났습니다. 인터넷 권한의 부족에 대해 아무런 불만이 없었다 왜

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

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

를 있었어야했는데, 나도 몰라.

0

시도해보십시오. https://gist.github.com/JakeWharton/5616899. 클래스를 생성하고 두 번째 param을 전달하십시오. 작동하는지 확인하십시오.

+0

요지는 오래된 것 같습니다. 코드를 실행하려 할 때'client.open '에 대한 호출이 정의되어 있지 않다고 불평했습니다. 해결 방법을 사용하고 싶지 않습니다. Android 문서에서 의도 한대로 Volley 라이브러리를 사용하고 싶습니다. – tronman