Kotlin – ¿Cómo hacer onCompleteListener para get datos de Firestre?

Tengo un problema para Obtener datos de Firestre, en JavaCode podemos hacer esto:

DocumentReference docRef = db.collection("cities").document("SF"); docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { @Override public void onComplete(@NonNull Task<DocumentSnapshot> task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document != null) { Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData()); } else { Log.d(TAG, "No such document"); } } else { Log.d(TAG, "get failed with ", task.getException()); } } }); 

pero en Kotlin, cuando bash Anular la function onComplete, no está disponible. Entonces, ¿cómo puedo get la "tarea"?

Utilice la syntax de "object" para ello: notación de objects

Por ejemplo código de Java:

 button1.setOnClickListener(new OnClickListener() { public void onClick(View v) { // Handler code here. Toast.makeText(this.MainActivity, "Button 1", Toast.LENGTH_LONG).show(); } }); 

Kotlin:

 button1.setOnClickListener(object: View.OnClickListener { override fun onClick(view: View): Unit { // Handler code here. Toast.makeText(this@MainActivity, "Button 1", Toast.LENGTH_LONG).show() } }) 

Si está utilizando Android Studio 3, puede usarlo para convertir el código de Java a Kotlin . Coloque el código de interés en un file java y desde la barra de menu select Código> Convertir file Java a Kotlin File .

Como ejemplo, para este código que ha publicado, el resultado de la conversión se muestra a continuación:

 import android.support.annotation.NonNull; import android.util.Log; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.firestre.DocumentReference; import com.google.firebase.firestre.DocumentSnapshot; import com.google.firebase.firestre.FirebaseFirestre; public class ConversionExample { private static final String TAG = "ConversionExample"; public void getDoc() { FirebaseFirestre db = FirebaseFirestre.getInstance(); DocumentReference docRef = db.collection("cities").document("SF"); docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { @Override public void onComplete(@NonNull Task<DocumentSnapshot> task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document != null) { Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData()); } else { Log.d(TAG, "No such document"); } } else { Log.d(TAG, "get failed with ", task.getException()); } } }); } } 

El file convertido a Kotlin:

 import android.util.Log import com.google.firebase.firestre.FirebaseFirestre class ConversionExample { fun getDoc() { val db = FirebaseFirestre.getInstance() val docRef = db.collection("cities").document("SF") docRef.get().addOnCompleteListener { task -> if (task.isSuccessful) { val document = task.result if (document != null) { Log.d(TAG, "DocumentSnapshot data: " + task.result.data) } else { Log.d(TAG, "No such document") } } else { Log.d(TAG, "get failed with ", task.exception) } } } companion object { private val TAG = "ConversionExample" } } 
  • Archivo encontrado en IntelliJ pero no en jar integrado
  • Cómo llamar a assertEquals con Double Epsilon / Precision en Kotlin?
  • Kotlin y Dagger2
  • Diferencia entre los methods de OnclickListener en Kotlin
  • ¿Cómo enlazar el evento onClick de la vista usando Android Binding Library y Kotlin?
  • ¿Cómo vincular a un miembro estático de una class de Java en KDoc?
  • Cómo `continue` o` break` en una instrucción `when` dentro de un ciclo` while` usando Kotlin
  • ¿Qué significa "it <= ''" en la function de cadena de recorte aquí?
  • WeakReference no funciona en Kotlin
  • Importación de objects nesteds / funciones de objects en Kotlin
  • ¿Puedo usar @Bean de AndroidAnnotation dentro de Kotlin?