java - 将 kotlin 转换为 java 以传递给 Firestore

标签 java android kotlin

我想在java文件中的kotlin文件上使用这个方法,不幸的是我不知道如何在java中做到这一点。有人可以帮我吗?

Kotlin 代码更改为 Java:

val progressDialog = indeterminateProgressDialog("Setting up your module")
            FirestoreUtil.getImportModules(ID, applicationContext) {
                val intent = Intent(this@AddModActivity, EditImportUserActivity::class.java)
                intent.putExtra("moduleID", ID)
                intent.putExtra("moduleCode", code)
                intent.putExtra("moduleName", name)
                startActivity(intent)
                progressDialog.dismiss()
            }

它在firstore util中调用此方法(不需要更改)

fun getImportModules(String: String = "", context : Context, onComplete: () -> Unit) {
    firestoreInstance.collection("assessment").whereEqualTo("module", String).get()
            .addOnSuccessListener { documentSnapshot ->
                lateinit var realm: Realm
                Realm.init(context)
                val defaultConfig = RealmConfiguration.Builder()
                        .schemaVersion(0)
                        .build()
                realm = Realm.getInstance(defaultConfig)
                val results = realm.where(Assessment::class.java).findAll()
                realm.executeTransaction {
                    results.deleteAllFromRealm()
                }
                if (documentSnapshot.isEmpty) {
                    onComplete()
                }
                else
                {
                    documentSnapshot!!.documents.forEach {
                        val s = Assessment(Double.parseDouble(it.get("achieved")!!.toString()),
                                it.get("date")!!.toString(), it.get("desc")!!.toString(), it.get("module")!!.toString(),
                                it.get("time")!!.toString(), Double.parseDouble(it.get("total")!!.toString()), it.get("type")!!.toString(),
                                it.get("weight")!!.toString())
                        //SAVE
                        val helper = RealmHelper(realm)
                        helper.save(s)
                    }
                    onComplete()
                }
            }
}

我知道如何制作进度对话框和 Intent ,我不知道如何将 Intent 传递给方法onComplete()

提前谢谢

最佳答案

() -> Unit 转换为 Kotlin 中 Function 接口(interface)的实例。

这意味着您应该能够创建它的一个实例:

FirestoreUtil.getImportModules(ID, getApplicationContext(), new Function<Unit>() {
    @Override
    public Unit invoke() {
        Intent intent = new Intent(AddModActivity.this, EditImportUserActivity.class)
        intent.putExtra("moduleID", ID)
        intent.putExtra("moduleCode", code)
        intent.putExtra("moduleName", name)
        startActivity(intent)
        progressDialog.dismiss()
        return Unit.INSTANCE; //notice this line; Kotlin treats the Unit class as void, but Java treats it as an actual class
});

如果您使用 Java 8(面向 API 24 或更高版本并启用它),则可以使用 lambda,这会使其更短:

FirestoreUtil.getImportModules(ID, getApplicationContext(), () -> {
    Intent intent = new Intent(AddModActivity.this, EditImportUserActivity.class)
    intent.putExtra("moduleID", ID)
    intent.putExtra("moduleCode", code)
    intent.putExtra("moduleName", name)
    startActivity(intent)
    progressDialog.dismiss()
    return Unit.INSTANCE;
});

关于java - 将 kotlin 转换为 java 以传递给 Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52995850/

相关文章:

java - 从整数字符串中减去整数

java - 有没有办法使用多次尝试和一次捕获?

Android 选项卡布局不占用自定义 View 的全宽

oop - kotlin类构造函数参数的默认值类型是什么?

Java:特定字符报告的数量

java - 如何从一个jframe到另一个jframe访问jtextarea

javascript - Kotlin 转换为 Javascript 错误 : "subtract is not a function"

java - 在不同的事件循环上为不同的 webflux 端点提供服务

java - 如何为我的数组创建 insertInOrder 方法

android - 以编程方式返回到上一个 fragment