Bermigrasi ke Klien GoogleApi

Rilis 11.2.0 Google Play services SDK menyertakan cara baru untuk mengakses Places SDK for Android. Klien GoogleApi lebih mudah digunakan daripada pendahulunya (GoogleApiClient), karena secara otomatis mengelola koneksi ke layanan Google Play. Hal ini mengurangi jumlah kode boilerplate di aplikasi Anda, dan dapat membantu menghilangkan banyak kesalahan umum. API baru ini menawarkan sejumlah peningkatan:

  • Proses koneksi dikelola secara otomatis, sehingga API baru lebih mudah diimplementasikan.
  • Panggilan API kini otomatis menunggu koneksi layanan dibuat, sehingga tidak perlu menunggu onConnected sebelum membuat permintaan.
  • Tasks API memudahkan penyusunan operasi asinkron.
  • Kode ini bersifat mandiri, dan dapat dipindahkan ke class utilitas bersama atau yang serupa.

Mengupdate aplikasi Anda untuk menggunakan klien GoogleApi memerlukan beberapa perubahan pada implementasi Places SDK for Android Anda. Panduan ini menjelaskan perubahan pada Places SDK for Android, dan merekomendasikan langkah-langkah yang harus dilakukan saat mengupdate aplikasi Anda untuk menggunakan klien baru.

Ringkasan

Area perubahan utama adalah sebagai berikut:

  • Ada dua titik entri baru: GeoDataClient dan PlaceDetectionClient. Daripada membuat satu instance GoogleApiClient untuk mencakup semua API, aplikasi Anda kini harus membuat instance GeoDataClient dan PlaceDetectionClient.
  • Karena callback koneksi tidak lagi diperlukan, Anda dapat memfaktorkan ulang aplikasi dengan aman untuk menghapusnya.
  • Metode Places API baru kini bersifat asinkron, dan menampilkan Task, bukan PendingResult.

Memuat Places API

Untuk memuat Places API, deklarasikan titik entri, lalu buat instance klien dalam metode onCreate() fragmen atau aktivitas Anda seperti yang ditunjukkan dalam contoh berikut:

// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Construct a GeoDataClient.
    mGeoDataClient = Places.getGeoDataClient(this, null);

    // Construct a PlaceDetectionClient.
    mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);

Perbandingan

Metode Places API baru kini bersifat asinkron, dan menampilkan Task, bukan PendingResult. Struktur data tidak berubah, sehingga kode yang ada untuk menangani hasil tidak perlu diperbarui. Contoh kode berikut membandingkan versi baru dan sebelumnya dari GetCurrentPlace():

Cara baru

Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
    @Override
    public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
        PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
        for (PlaceLikelihood placeLikelihood : likelyPlaces) {
            Log.i(TAG, String.format("Place '%s' has likelihood: %g",
                placeLikelihood.getPlace().getName(),
                placeLikelihood.getLikelihood()));
        }
        likelyPlaces.release();
    }
});

Cara lama

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    for (PlaceLikelihood placeLikelihood : likelyPlaces) {
      Log.i(TAG, String.format("Place '%s' has likelihood: %g",
          placeLikelihood.getPlace().getName(),
          placeLikelihood.getLikelihood()));
    }
    likelyPlaces.release();
  }
});

Pelajari lebih lanjut

Pelajari lebih lanjut cara mengakses Google API.