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»: нотация объекта

Например, код 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 и в строке меню выберите « Код»> «Преобразовать файл 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" } } 
Intereting Posts
Могу ли я использовать инъекцию кинжала 2 в Котлин? Тест инструмента Android с помощью Espresso не работает: NoSuchMethodError get () в javax.inject.Provider Форма, пригодная для xml-кода Пропущенные классы в android studio 3.0 canary 4 ui preview Разбор json со сломанным удаленным API Неразрешенная ссылка: поле в Котлине Как получить идентификатор документа для документа Firestore с использованием классов данных kotlin проекции не допускаются для непосредственных подтипов супертипа Kotlin Dokka – Не удается найти задачу Dokka в андроид-студии Kotlin падает на Android, когда выбранный вид элемента равен нулю сериализация с помощью gson и back не работает с общими типами Как смешивать несколько конструкторов родительского класса с val в дочернем классе Kotlin KFunction reflection – получить значения параметров Выбрать свойство из каждого объекта в списке Есть ли допустимое правило proguard для RxJava и FasterXML?