Autore Topic: Place e Buffer  (Letto 808 volte)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Place e Buffer
« il: 19 Marzo 2016, 12:00:52 CET »
0
Salve a tutti. Sono arrivato al punto in cui le mie basi di java non mi permettono di fare certe cose:
Devo ricavare una lista di Place con il metodo cosi proposto da google:

Codice (Java): [Seleziona]
  private void fetchPlaces(){
        Places.GeoDataApi.getPlaceById(mGoogleApiClient, ids)
                .setResultCallback(new ResultCallback<PlaceBuffer>() {
                    @Override
                    public void onResult(PlaceBuffer places) {
                        if (places.getStatus().isSuccess() && places.getCount() > 0) {
                            Iterator<Place> iterator = places.iterator();
                            while(iterator.hasNext())
                                placeManager.addPlace(iterator.next());

                        } else {
                            Log.e(MapsActivity.TAG, "Place not found");
                        }
                    }
                });
    }

ids è un array. Questo metodo prende una stringa come id del Place, un array, oppure una serie di parametri esempio:
Codice (Java): [Seleziona]
getPlaceById(mGoogleApiClient, "123","345","444")
Ora li uso un interator. Ho provato a fare un ciclo for usando:
Codice (Java): [Seleziona]
for(Place p : places){//code}Il tutto funziona bene e i Place vengono trovati correttamente.
Il problema che google stessa consiglia caldamente di rilasciare il buffer.
Ora placeManager tiene una lista di Place normalissima.
Prima del release del buffer, la lista è accessibile, dopo il release ho il seguente errore:

Codice: [Seleziona]
java.lang.IllegalArgumentException: Buffer is closed.
Quindi mi è venuto in mente che in java sono tutti puntatori. Quindi come risolvo sta situazione? non posso salvarmi un campo Buffer e chiuderlo in un OnStop(). MI sembra un idea bruttissima

Post unito: 19 Marzo 2016, 12:24:58 CET
Allora. In effetti leggendo qui:

https://developers.google.com/places/android-api/buffers

Spiega di chiamare .freeze() come metodo. Tale metodo effettua una copia. Secondo google sarebbe da chiamare solo in caso di necessità estrema, ma vabbe.

Rimane il fatto che non avrei comunque una soluzione fatta da me in java (e si anche io pensavo ad una copia).
« Ultima modifica: 19 Marzo 2016, 12:24:58 CET da tonno16, Reason: Merged DoublePost »