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" } } 
  • ¿Podemos usar infix methods generics en Kotlin?
  • falla en la construcción de Travis ci - causa: espacio PermGen
  • El operador "si" de Elvis en Kotlin como argumento pnetworkingeterminado de la function
  • Map.mapTo a otro map
  • ¿Cómo puedo declarar una list con valores en una sola línea en kotlin?
  • ¿Cuál es el lugar correcto para comenzar un service en la architecture MVVM Android?
  • El parámetro no tiene una coincidencia; SimpleXML
  • Problema con data binding usando Kotlin para Android
  • No se puede llamar al operador desde () en Observable en Android Kotlin
  • Métodos de acceso fuera del object complementario - Kotlin
  • ¿Cómo get la reference de class de KParameter en kotlin?