2016-12-08 2 views
0

У меня есть служба, которая возвращает некоторые данные, я могу уже получить эти данные, например, и разместить в текстовом представлении или в журнале/тосте, но я хотел включить его в ArrayList, чтобы быть читайте на картах Google, но, как я пытался, представляет ошибку. Ниже код и погрешностьКак заполнить arraylist с помощью модификации

MainActivity.

@Override 
public void onMapReady(GoogleMap googleMap) { 

     mMap = googleMap; 
     // create class object 
     gps = new GPSTracker(MainActivity.this); 

     this.getOccurrence(); 

     // check if GPS enabled 
     if(gps.canGetLocation()){ 

      double latitude = gps.getLatitude(); 
      double longitude = gps.getLongitude(); 


      LatLng local = new LatLng(latitude, longitude); 
      mMap.addMarker(new MarkerOptions().position(local)); 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(local, 16)); 

      // Create a heat map tile provider, passing it the lat long of the police stations. 
      mProvider = new HeatmapTileProvider.Builder() 
        .data(list) // Error happens here 
        .build(); 
      // Add a tile overlay to the map, using the heat map tile provider. 
      mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider)); 

     }else{ 
      gps.showSettingsAlert(); 
     } 


    private void getOccurrence() { 
     try { 
      list = readItems(); 
     } catch (JSONException e) { 
      Toast.makeText(this, "Error", Toast.LENGTH_LONG).show(); 
     } 

    } 


    private List<LatLng> readItems() throws JSONException { 
    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 
    final Call<List<MyPojo>> call = apiService.getResut(); 
    call.enqueue(new Callback<List<MyPojo>>() { 
     @Override 
     public void onResponse(Call<List<MyPojo>> call, Response<List<MyPojo>> response) { 

      try { 
       List<MyPojo> LatLngData = response.body(); 
       Log.v(TAG, "LOGS" + LatLngData.size()); 
       ArrayList<LatLng> list = new ArrayList<LatLng>(); 
       for (int i = 0; i < LatLngData.size(); i++) { 
        double lat = LatLngData.get(i).getLat(); 
        double lng = LatLngData.get(i).getLng(); 
        list.add(new LatLng(lat, lng)); 
       } 

      } catch (Exception e) { 
       Log.d("onResponse", "There is an error"); 
       e.printStackTrace(); 
      } 
     } 
     @Override 
     public void onFailure(Call<List<MyPojo>> call, Throwable t) { 

     } 
    }); 
    Log.v(TAG, "" + list); 
    return list; 
} 

MyPojo (модель)

import com.google.gson.annotations.SerializedName; 

public class MyPojo { 

    @SerializedName("lat") 
    private Double lat; 

    @SerializedName("lng") 
    private Double lng; 

    public MyPojo(Double lat, Double lng) { 
     this.lat = lat; 
     this.lng = lng; 
    } 


    public Double getLat() { 
     return lat; 
    } 

    public void setLat(Double lat) { 
     this.lat = lat; 
    } 

    public Double getLng() { 
     return lng; 
    } 

    public void setLng(Double lng) { 
     this.lng = lng; 
    } 
} 

ApiInterface

public interface ApiInterface { 

    @Headers("Accept: application/json") 
    @GET("/locations") 
    Call<List<MyPojo>> getResult(); 

} 

Ошибка

2-08 14:13:53.348 3823-3823/ 
    br.com.example E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: br.com.example, PID: 3823 
                     java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.Collection.iterator()' on a null object reference 
                      at br.com.example.googlemaps.heatmaps.HeatmapTileProvider.wrapData(HeatmapTileProvider.java:346) 
                      at br.com.example.googlemaps.heatmaps.HeatmapTileProvider.access$000(HeatmapTileProvider.java:39) 
                      at br.com.example.googlemaps.heatmaps.HeatmapTileProvider$Builder.data(HeatmapTileProvider.java:188) 
                      at br.com.example.activity.MainActivity.onMapReady(MainActivity.java:140) 
                      at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source) 
                      at com.google.android.gms.maps.internal.zzo$zza.onTransact(Unknown Source) 
                      at android.os.Binder.transact(Binder.java:499) 
                      at yd.a(:com.google.android.gms.DynamiteModulesB:82) 
                      at maps.ad.t$5.run(Unknown Source) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6077) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
+0

Не могли бы вы поделиться своим классом модели и вашим интерфейсом и образцом ответа json, который вы получаете? –

+0

Обновленный вопрос –

ответ

1

ApiInterface

public interface ApiInterface { 

    @Headers("Accept: application/json") 
    @GET("/locations") 
    Call<ArrayList<MyPojo>> getResult(); 

} 

Надеется, что вы уже добавили gson конвертера с модифицированным как этого

addConverterFactory(GsonConverterFactory.create()) 

инициализацией ArrayList

ArrayList<MyPojo> latLngData = new ArrayList<MyPojo>() 

изменить ваш метод, как следующие

private ArrayList<LatLng> readItems() throws JSONException { 
    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 
    final Call<ArrayList<MyPojo>> call = apiService.getResut(); 
    call.enqueue(new Callback<ArrayList<MyPojo>>() { 
     @Override 
     public void onResponse(Call<ArrayList<MyPojo>> call, Response<ArrayList<MyPojo>> response) { 

      try { 
       latLngData.addAll(response.body()) ; 
       Log.v(TAG, "LOGS" + LatLngData.size()); 
       ArrayList<LatLng> list = new ArrayList<LatLng>(); 
       for (int i = 0; i < latLngData.size(); i++) { 
        double lat = latLngData.get(i).getLat(); 
        double lng = latLngData.get(i).getLng(); 
        list.add(new LatLng(lat, lng)); 
       } 

      } catch (Exception e) { 
       Log.d("onResponse", "There is an error"); 
       e.printStackTrace(); 
      } 
     } 
     @Override 
     public void onFailure(Call<ArrayList<MyPojo>> call, Throwable t) { 

     } 
    }); 
    Log.v(TAG, "" + list); 
    return list; 
} 

И в этом методе

private void getOccurrence() { 
     try { 
      list = readItems(); 
     } catch (JSONException e) { 
      Toast.makeText(this, "Error", Toast.LENGTH_LONG).show(); 
     } 

    } 

быть уверены list объявлена ​​и инициализирована как ArrayList

Позвольте мне знать, если это работает для вас.

+0

YEEEEEEEEESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS THANK YOU –

+0

Если это поможет вам принять ответ –

0
initialized ArrayList 

     private List<LatLng> readItems() throws JSONException { 
    List<LatLng> list=new List<>(); 
     ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class); 
     final Call<List<MyPojo>> call = apiService.getResut(); 
     call.enqueue(new Callback<List<MyPojo>>() { 
      @Override 
      public void onResponse(Call<List<MyPojo>> call, Response<List<MyPojo>> response) { 

       try { 
        List<MyPojo> LatLngData = response.body(); 
        Log.v(TAG, "LOGS" + LatLngData.size()); 
        ArrayList<LatLng> list = new ArrayList<LatLng>(); 
        for (int i = 0; i < LatLngData.size(); i++) { 
         double lat = LatLngData.get(i).getLat(); 
         double lng = LatLngData.get(i).getLng(); 
         list.add(new LatLng(lat, lng)); 
        } 

       } catch (Exception e) { 
        Log.d("onResponse", "There is an error"); 
        e.printStackTrace(); 
       } 
      } 
      @Override 
      public void onFailure(Call<List<MyPojo>> call, Throwable t) { 

      } 
     }); 
     Log.v(TAG, "" + list); 
     return list; 
    } 
+0

принимаем если код поможет вам –

+0

Это не решило проблему. –

+0

Какая проблема возникает? Сообщение об ошибке –

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