2015-09-02 3 views
1

Я очень новичок в Java и Android Studio.java.lang.NullPointerException: попытка вызвать метод интерфейса 'int java.util.List.size()' на ссылке нулевого объекта

Я использую этот пример кода

http://javapapers.com/android/draw-path-on-google-maps-android-api/

Мой проект компилируется и запускается на следующий пункт. Я попробовал режим отладки, и я вижу, что отображаются карты Google Map и отображаются 3 маркера. Затем я получаю следующее сообщение.

9-03 00:06:04.459 19022-19022/nyc.mymaptest3 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: nyc.mymaptest3, PID: 19022 
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
      at nyc.mymaptest3.PathGoogleMapActivity$ParserTask.onPostExecute(PathGoogleMapActivity.java:128) 
      at nyc.mymaptest3.PathGoogleMapActivity$ParserTask.onPostExecute(PathGoogleMapActivity.java:101) 
      at android.os.AsyncTask.finish(AsyncTask.java:632) 
      at android.os.AsyncTask.access$600(AsyncTask.java:177) 
      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:145) 
      at android.app.ActivityThread.main(ActivityThread.java:5938) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 

Я чувствую, что возвращаемые маршруты пусты/null, и я не знаю, как отлаживать это дальше.

линия 101 начинается здесь >>>

private class ParserTask extends 
      AsyncTask<String, Integer, List<List<HashMap<String, String>>>> { 

     @Override 
     protected List<List<HashMap<String, String>>> doInBackground(
       String... jsonData) { 

      JSONObject jObject; 
      List<List<HashMap<String, String>>> routes = null; 

      try { 
       jObject = new JSONObject(jsonData[0]); 
       PathJSONParser parser = new PathJSONParser(); 
       routes = parser.parse(jObject); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return routes; 
     } 

линия 128 показано ниже >>>

protected void onPostExecute(List<List<HashMap<String, String>>> routes) { 
      ArrayList<LatLng> points = null; 
      PolylineOptions polyLineOptions = null; 

      // traversing through routes 

      for (int i = 0; i < routes.size(); i++) { 
       points = new ArrayList<LatLng>(); 
       polyLineOptions = new PolylineOptions(); 
       List<HashMap<String, String>> path = routes.get(i); 

Line 128   for (int j = 0; j < path.size(); j++) { 
        HashMap<String, String> point = path.get(j); 

        double lat = Double.parseDouble(point.get("lat")); 
        double lng = Double.parseDouble(point.get("lng")); 
        LatLng position = new LatLng(lat, lng); 

        points.add(position); 
       } 

       polyLineOptions.addAll(points); 
       polyLineOptions.width(2); 
       polyLineOptions.color(Color.BLUE); 
      } 

      googleMap.addPolyline(polyLineOptions); 
     } 
+0

Ну, похоже, что маршруты не являются нулевыми, что хорошо, но вы можете посмотреть, почему route.get (i) для конкретного i является нулевым. Ответ здесь не представляется возможным в вашем парсере. –

+0

@AndrewBrooke 'routes'' '' null' должен ломаться первым 'for'. Вероятно, это не 'null', но содержимое неожиданно. В любом случае, трудно сказать без отладки. – poss

+0

Да, я неправильно понял это. Тем не менее, может возникнуть ошибка при анализе JSON, вы должны проверить, действительно ли это: http://jsonlint.com/ –

ответ

0

После этого

List<HashMap<String, String>> path = routes.get(i); 

Добавить

If(path==null) break; 
Смежные вопросы

 Смежные вопросы