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