android - Kotlin - 如何执行 onCompleteListener 以从 Firestore 获取数据?

标签 android firebase kotlin google-cloud-firestore

我在从 Firestore 获取数据时遇到问题,在 Java 代码中我们可以这样做:

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 函数时,它不可用。那么,我怎样才能得到“任务”呢?

最佳答案

如果您使用的是 Android Studio 3,您可以使用它来 convert Java code to Kotlin .将感兴趣的代码放入 java 文件中,然后从菜单栏中选择代码 > 将 Java 文件转换为 Kotlin 文件

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

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"
    }
}

关于android - Kotlin - 如何执行 onCompleteListener 以从 Firestore 获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47214368/

相关文章:

java - android 获取adMob高度

android - 内核如何知道 USB 设备何时自行进入低功耗模式(不是由主机启动)?

android - Macbook M1 : An error occurred while trying to compute required packages 上有关 Android Studio 的错误

web - 如何为代码实验室配置 Firebase SDK?

java - 如何使用resttemplate将多部分文件和一些字段传递到另一个api?

android - 当我同步 gradle 时,android Studio 3.0 出现错误。错误:Cause: unable to find valid certification path to requested target

android - 在android中动态移动图像

swift - 当其他用户的应用程序处于非事件状态时,如何让一个用户获取另一个用户的位置? ( swift/火力基地)

javascript - React Native 数据不会在第一次点击时推送到 firebase

c# - 如何将C#代码转换为Kotlin的Json库