Kotlin – 如何做onCompleteListener从Firestore获取数据?

我有一个问题从Firestore中获取数据,在JavaCode中我们可以这样做: DocumentReference docRef = db.collection(“cities”).document(“SF”); docRef.get().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task 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函数,它是不可用的。 那么,我怎样才能得到“任务”呢?

在BottomsheetDialog中使用setcontentview时,会出现类似“以下函数都不能用提供的参数调用”的错误

我试图在我的片段中实现BottomsheetDialog。 但是当我尝试调用bottomSheetDialog.setContentView(view)的错误 以下任何函数都不能用在android.support.design.widget.BottomSheetDialog中定义的android.support.design.widget.BottomSheetDialog中定义的setContentView(View!)参数来调用setContentView(Int) 当我用Java代码实现它时,它完美的工作。 但是当试图用Kotlin实现这个错误时, 提供我用Kotlin试过的代码, private fun showRenewDialog(renewModel: RenewModel?) { if (bottomSheetDialog == null) bottomSheetDialog = BottomSheetDialog(activity) val view:View? = activity.getLayoutInflater().inflate(R.layout.renewal_dialog, null, false) bottomSheetDialog.setContentView(view) } 与Java相同的代码 if (bottomSheetDialog == null) bottomSheetDialog = new BottomSheetDialog(getActivity()); View view = getActivity().getLayoutInflater().inflate(R.layout.book_dialog, null, false); bottomSheetDialog.setContentView(view);

Android WebView不会加载特定的URL

我正在做一个小型的摄像头查看器应用程序,我遇到了一个下面的问题:一些URL加载完全罚款,一个特定的types不加载和Logcat我不明白为什么… 我在Kotlin编写这个应用程序,所以wv_main只是一个WebView的综合链接,它位于activity_web_view.xml中的 FrameLayout内部。 以下是我的onCreate的代码: super.onCreate(savedInstanceState) setContentView(R.layout.activity_web_view) val wv = wv_main wv.settings.javaScriptEnabled = true wv.settings.domStorageEnabled = true if (Build.VERSION.SDK_INT >= 21) wv.settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW wv.webChromeClient = WebChromeClient() wv.webViewClient = WebViewClient() wv.loadUrl(intent.getStringExtra(“link”)) 例如,如果我通过以下URL传递给此活动: https : //api.lookr.com/embed/player/1485691420/day然后,它将被完美解释并正确打开。 但是,如果我通过,例如,这样的事情: https : //api.lookr.com/embed/player/1485691420/live然后,我不喜欢关闭一个应用程序的错误,而是看起来像WebView的东西内部错误: Rejecting re-init on previously-failed class java.lang.Class:java.lang.NoClassDefFoundError: Failed resolution of: Landroid/webkit/RenderProcessGoneDetail; 12-27 18:52:08.012 10385-10385/com.example.elber.webcams I/art: at com.android.webview.chromium.Ap com.android.webview.chromium.WebViewChromiumFactoryProvider.G(android.webkit.WebView, […]

java File.createNewFile偶尔执行程序的其余部分之前抛出IOException

我有这个项目,我正在做什么,无论什么原因,每当我执行程序,并把它(我设置和所有)所需的给定参数,偶尔IOException抛出之前执行其他任何事情。 这似乎是真的,因为我到处都有伐木工人,没有人被解雇。 但是,似乎只是记录器不被解雇,因为当我看着我输出的JSON文件,它表明,它没有执行的第一步,只是没有记录器。 我是新的log4j2,所以它可能是,但我不知道(记录器不被解雇),但它似乎很奇怪,IOException应该不会发生。 因为当我在崩溃后再次执行它,它运行得很好。 (注意:这是在kotlin / jvm中,但这是关于使用JDK File类的) 这里抛出exception: https : //github.com/AlexCouch/projauto/blob/master/src/main/java/thinkingcouch/projauto/Save.kt#L114 我在使用Intellij IDEA 2017.3的MacOSX High Sierra。

@Parcelize注释与inheritance

我无法使用@parcelize注释创建通用结构。 我希望构造函数可以用作Jason,Room和Parcelable的构造函数。 让我们假设我们有课 @Parcelize class Food(var taste: String = “”) 现在我首先想到了两个解决方案 1.提示味道必须是var或val,有可用的Parceable构造函数 @Parcelize class FastFood(var callory:String = “”, taste: String): Food(taste) // error 我认为,我必须明确地确定一下这个口味 – 那么多态的好处是什么呢? @Parcelize class FastFood(var callory: String = “”, var taste: String): Food(taste) // error 我怎样才能有效地inheritance与你的图书馆?

从Java 6迁移到Kotlin

我有一些在Java 6和Spring应用服务器上的项目。 由于我的基础架构和治理规划的限制,我无法迁移到较新的Java 7或8。 我想我可以在这些项目中添加Kotlin,以使用function性编程等function。 这是一个很好的途径吗? 谢谢

如果在首选项中设置,请告诉Glide不要加载图像

我有几个RecyclerView在我的应用程序中,他们都有一个ImageView项目,进一步填充Glide ,如下所示: Glide.with(context) .load(imageUrl) .asBitmap() .error(R.drawable.placeholder_avatar) .centerCrop() .into(mAvatarImageView); 在我的首选项屏幕中,用户可以禁用加载所有远程图像以节省带宽。 告诉Glide不要加载图像,而不使用所有RecyclerView适配器中的经典if-else条件,违反了DRY原则的最好方法是什么? 我正在寻找这样的方法: .shouldLoad(UserSettings.getInstance().isImageLoadingEnabled());

你如何编写types参数的类的二级构造函数?

假设我有下面的类,并带有一个types参数T(在这个例子中它是有界的,以帮助说明后面的例子,但是当它是无界的时候,错误仍然存​​在): class GenericsTest(private var cs: T) 现在假设我想为这个类添加一个辅助构造函数。 我怎样才能做到这一点? 我第一次(天真)的尝试导致了一个编译器错误: class GenericsTest(private var cs: T) { // dummy exists to ensure the method signatures are different constructor(cs: String, dummy: Int) : this(“a”) } IntelliJ强调”a”与消息: Type mismatch. Required: T Found: String 对我来说, String似乎是一个完全有效的T 我想明确指定types参数会有所帮助,但似乎不被允许。 这两种尝试都是不正确的语法: constructor(cs: String, dummy: Int) : this(“a”) constructor(cs: U, dummy: Int) : this(“a”) […]

忽略setter并直接设置属性

我有一个类,写一个用户SharedPreferences每次它的设置: class UserManager @Inject constructor( val prefs: SharedPreferences, val jsonAdapter: JsonAdapter ) { companion object { val USER = “user” } var user: User = User() set(value) { field = value prefs.edit().putString(USER, jsonAdapter.toJson(user)).apply() } init { val userString = prefs.getString(USER, null) if (userString != null) { user = jsonAdapter.fromJson(userString) } } } 问题:如果用户被设置在init块中,它会调用setter,并将刚才从共享的prefs中得到的用户写入共享的prefs。 问题1:如何直接从init块设置属性? 问题2:当我定义一个自定义setter时,为什么我必须初始化用户,但是当使用默认setter时可以省略初始化?

如何转换到Kotlin的固定(2)

请编辑我的代码。 谢谢。 fun main(args: Array) { val a = 20 val h = 30 val area = a * h / 2 println(“Triangle area = $area.toFixed(2)”) }