Конвертировать kotlin в java для передачи в Firestore - PullRequest
0 голосов
/ 25 октября 2018

Я хотел бы использовать эти методы, которые я использовал для файла kotlin в файле java, к сожалению, я не знаю, как это сделать в java.Может ли кто-нибудь помочь мне, пожалуйста?

Код Котлина для перехода на 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 (менять не нужно)

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

Я знаю, как создать диалог прогресса и намерения, но я не знаю, как это сделать, - передать намерение методам onComplete().

Заранее спасибо

1 Ответ

0 голосов
/ 25 октября 2018

() -> Unit преобразуется в экземпляр интерфейса Function в Kotlin.

Это означает, что вы должны иметь возможность просто создать его экземпляр:

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 или выше и имеют его включенным), вы можете использовать лямбду, что делает его немного короче:

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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...