2013-04-26 8 views
0

Google Places API를 구현하려고하지만 java.lang.nullpointerexception을 계속 전송합니다. 나는이 사이트의 코드를 가지고있다 : http://www.androidhive.info/2012/08/android-working-with-google-places-and-maps-tutorial/google places API android는 java ..lang.nullpointerexception을 반환합니다.

내가 수집 할 수있는 것으로부터 나는 어떤 Google 서버에 URL을 보내고 응답을 받는다. 그 응답은 JSON 형식으로되어 있으며 내 특정 "Locations"객체로 구문 분석됩니다. 나는 파싱 단계에서 어떤 일이 일어날 것이라고 생각한다. 사이트에서 그들은 중개자 객체 PlacesList를 사용합니다. 나는 그것을 이해하지 못하기 때문에 상황이 잘못 될 것이라고 생각합니다.

PlacesList :

 public class PlacesList implements Serializable { 

    @Key 
    public String status; 

    @Key 
    public List<Locations> results; 

}

구글 검색 :

MainActivity에서 홈페이지에
 public PlacesList search(double latitude, double longitude, double radius) 
     throws Exception { 

    this._latitude = latitude; 
    this._longitude = longitude; 
    this._radius = radius; 

    try { 

     HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT); 
     HttpRequest request = httpRequestFactory 
       .buildGetRequest(new GenericUrl(PLACES_SEARCH_URL)); 
     request.getUrl().put("key", API_KEY); 
     request.getUrl().put("location", _latitude + "," + _longitude); 
     request.getUrl().put("radius", _radius); // in meters 
     request.getUrl().put("sensor", "false"); 


     PlacesList list = request.execute().parseAs(PlacesList.class); 
     Log.i("placelist.class", list.toString()); 
     // Check log cat for places response status 
     // Log.i("Places Status", "" + list.status); 

     return list; 

    } catch (HttpResponseException e) { 
     Log.e("Error:", e.getMessage()); 
     return null; 
    } 

} 

를 System.err (6447) : atcom.example.mapmapagain.MainActivity.onCreate (MainActivity.java:86) ==

   try { 
     PlacesList places = ps.search(curr_lat, curr_longitude, 100.0); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
어떤 도움

   04-26 19:10:52.839: W/System.err(4156): android.os.NetworkOnMainThreadException 
       04-26 19:10:52.899: W/System.err(4156): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
       04-26 19:10:52.899: W/System.err(4156): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
       04-26 19:10:52.899: W/System.err(4156): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
       04-26 19:10:52.899: W/System.err(4156): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
       04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 
      04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 
      04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
      04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
      04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
      04-26 19:10:52.899: W/System.err(4156): at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 
      04-26 19:10:52.899: W/System.err(4156): at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:88) 
      04-26 19:10:52.899: W/System.err(4156): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:814) 
      04-26 19:10:52.909: W/System.err(4156): at com.example.mapmapagain.PlaceSearch.search(PlaceSearch.java:64) 
      04-26 19:10:52.909: W/System.err(4156): at com.example.mapmapagain.MainActivity.onCreate(MainActivity.java:86) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.Activity.performCreate(Activity.java:5104) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
      04-26 19:10:52.909: W/System.err(4156): at android.os.Handler.dispatchMessage(Handler.java:99) 
      04-26 19:10:52.909: W/System.err(4156): at android.os.Looper.loop(Looper.java:137) 
      04-26 19:10:52.909: W/System.err(4156): at android.app.ActivityThread.main(ActivityThread.java:5039) 
      04-26 19:10:52.909: W/System.err(4156): at java.lang.reflect.Method.invokeNative(Native Method) 
      04-26 19:10:52.909: W/System.err(4156): at java.lang.reflect.Method.invoke(Method.java:511) 
      04-26 19:10:52.909: W/System.err(4156): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
      04-26 19:10:52.909: W/System.err(4156): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
      04-26 19:10:52.909: W/System.err(4156): at dalvik.system.NativeStart.main(Native Method) 

감사 :

다음은 로그 캣입니다.

+0

에뮬레이터를 연구하고 있습니까? – ACengiz

+0

정확하게 stacktrace와 그 외 모든 것을 게시하십시오. – cbrulak

+0

붙여 넣은 코드를 줄 번호로 매핑 할 수 있습니까? like Activity.java:5104 == "PlacesList list = request.execute(). parseAs (PlacesList.class);" ? – cbrulak

답변

1

당신은 android.os.NetworkOnMainThreadException 예외로 표시된 것처럼 안드로이드 프레임 워크에 의해 금지 된 메인 UI 스레드에서 네트워킹을하고 있습니다.

서버에 접근 할 수 없거나 사용자의 인터넷 연결 속도가 매우 느린 것을 상상해보십시오. 프로그램이 search의 기능을 시작하면 UI 스레드가 해당 서버에 접속하려고하면 바쁠 것이므로 반환 할 때까지 UI가 완전히 멈 춥니 다.

검색 기능을 AsyncTask에 넣거나 Runnable으로 감싸서 자체 스레드에서 실행되도록합니다. 좋은 예를 들어이 질문을보십시오 AsyncTask Android example

+0

고마워. 그것은 많은 의미가 있습니다. AsyncTask가 전에는 왜 필요하지 않은지 알지 못했습니다. – KarlCobb

+0

그리고 그것을 배우는 것이 가치가 있습니다! Pls는 문제가 해결되면 답변을 허용으로 표시합니다. 감사합니다. – chopchop