Kotlin – 如何做onCompleteListener从Firestore获取数据?

我有一个问题从Firestore中获取数据,在JavaCode中我们可以这样做:

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()); } } }); 

但在Kotlin,当我尝试覆盖onComplete函数,它是不可用的。 那么,我怎样才能得到“任务”呢?

请使用“object”语法: object notation

例如Java代码:

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

科特林:

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

如果您使用的是Android Studio 3,则可以使用它将Java代码转换为Kotlin 。 把感兴趣的代码放在一个java文件中,然后从菜单栏选择Code> Convert Java File to Kotlin File

例如,对于您发布的代码,转换的结果如下所示:

 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.firestore.DocumentReference; import com.google.firebase.firestore.DocumentSnapshot; import com.google.firebase.firestore.FirebaseFirestore; public class ConversionExample { private static final String TAG = "ConversionExample"; public void getDoc() { FirebaseFirestore db = FirebaseFirestore.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()); } } }); } } 

该文件转换为Kotlin:

 import android.util.Log import com.google.firebase.firestore.FirebaseFirestore class ConversionExample { fun getDoc() { val db = FirebaseFirestore.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" } }