标签: kotlin

Android获取当前时间戳?

我想得到当前的时间戳:1320917972

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();
Run Code Online (Sandbox Code Playgroud)

java android timestamp epoch kotlin

232
推荐指数
11
解决办法
28万
查看次数

Kotlin - 使用"by lazy"与"lateinit"进行属性初始化

在Kotlin中如果你不想在构造函数或类体的顶部初始化类属性,你基本上有这两个选项(来自语言参考):

  1. 延迟初始化

lazy()是一个函数,它接受一个lambda并返回一个Lazy实例,它可以作为实现一个惰性属性的委托:第一次调用get()执行传递给lazy()的lambda并记住结果,后续调用get()只返回记住的结果.

public class Hello {

   val myLazyString: String by lazy { "Hello" }

}
Run Code Online (Sandbox Code Playgroud)

所以第一次调用和子命令调用,无论它在哪里,到myLazyString将返回"Hello"

  1. 延迟初始化

通常,必须在构造函数中初始化声明为具有非null类型的属性.但是,这通常不方便.例如,可以通过依赖注入或单元测试的设置方法初始化属性.在这种情况下,您无法在构造函数中提供非null初始值设定项,但在引用类体内的属性时仍希望避免空值检查.

要处理这种情况,可以使用lateinit修饰符标记属性:

public class MyTest {

   lateinit var subject: TestSubject

   @SetUp fun setup() { subject = TestSubject() }

   @Test fun test() { subject.method() }
}
Run Code Online (Sandbox Code Playgroud)

修饰符只能用于在类体(不在主构造函数中)内声明的var属性,并且只能在属性没有自定义getter或setter时使用.属性的类型必须为非null,并且它不能是基本类型.

那么,如何在这两个选项之间正确选择,因为它们都可以解决同样的问题?

properties kotlin

232
推荐指数
7
解决办法
7万
查看次数

"const"和"val"有什么区别?

我最近读过这个const关键字,我很困惑!我找不到它和const关键字之间的任何区别,我的意思是我们可以使用它们来制作一个不可变的变量,还有什么我不知道的吗?

constants kotlin

231
推荐指数
10
解决办法
3万
查看次数

执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

突然间我开始收到这个错误,我不知道为什么如果有人让我知道这个错误在哪里,就会有足够的帮助。由于android studio的新更新,我能得到的最多。我得到的错误的详细摘要。

Task :app:kaptDebugKotlin
    ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1C:\Users\shubh\Downloads\MarginCalculator\app\build\generated\source\kapt\debug\com\kotlin_developer\margincalculator\DataBinderMapperImpl.java:10: error: cannot find symbol
    import com.kotlin_developer.margincalculator.databinding.FragmentCalculatorScreenBindingImpl;

    symbol:   class FragmentCalculatorScreenBindingImpl

    Task :app:kaptDebugKotlin FAILED
    location: package com.kotlin_developer.margincalculator.databinding …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio

227
推荐指数
20
解决办法
15万
查看次数

智能转换为'类型'是不可能的,因为'变量'是一个可变属性,此时可能已被更改

Kotlin新手问道,"为什么下面的代码不能编译?":

    var left: Node? = null

    fun show() {
         if (left != null) {
             queue.add(left) // ERROR HERE
         }
    }
Run Code Online (Sandbox Code Playgroud)

智能转换为'Node'是不可能的,因为'left'是一个可变属性,此时可能已被更改

我得到的left是可变变量,但是我明确地检查left != null并且left是类型的Node,为什么它不能被智能化到那种类型?

我怎样才能优雅地解决这个问题?:)

kotlin

225
推荐指数
5
解决办法
6万
查看次数

如何使用值初始化Kotlin中的数组?

在Java中,可以初始化数组,例如:

int numbers[] = new int[] {10, 20, 30, 40, 50}
Run Code Online (Sandbox Code Playgroud)

Kotlin的阵列初始化如何?

arrays kotlin

222
推荐指数
8
解决办法
16万
查看次数

无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中

尝试通过IntelliJ 运行示例CorDapp(https://github.com/corda/cordapp-example)时,收到以下错误:

无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中

如何修改IntelliJ设置,以便所有字节码都使用相同的JVM目标构建?

android jvm intellij-idea kotlin corda

221
推荐指数
27
解决办法
5万
查看次数

如何初始化Kotlin的MutableList以清空MutableList?

看起来很简单,但是,如何将Kotlin初始化MutableList为空MutableList

我可以通过这种方式破解它,但我确信有更容易的东西:

var pusta: List<Kolory> = emptyList()
var cos: MutableList<Kolory> = pusta.toArrayList()
Run Code Online (Sandbox Code Playgroud)

kotlin

210
推荐指数
4
解决办法
9万
查看次数

尝试访问Kotlin片段中的视图时出现NullPointerException

如何使用Kotlin Android扩展程序Fragment?如果我在里面使用它们onCreateView(),我得到这个NullPointerException例外:

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View android.view.View.findViewById(int)'

这是片段代码:

package com.obaied.testrun.Fragment

import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*

public class CardSelectorFragment : Fragment() {
    val TAG = javaClass.canonicalName

    companion object {
        fun newInstance(): CardSelectorFragment {
            return CardSelectorFragment()
        }
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
        btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }

        return rootView
    }
}
`
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-android-extensions

210
推荐指数
4
解决办法
4万
查看次数

android studio error:默认接口方法仅支持从Android N开始(--min-api 24)

我升级到Android工作室3.1,我得到以下错误:

    Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我的gradle配置:

      compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
    minSdkVersion 16
    targetSdkVersion 27
     multiDexEnabled true
     //...
   }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我的目标27已经领先于它抱怨的24个?我该怎么做才能解决这个问题?如果我改为1.8 java不会让我失去很多客户?为什么我在升级android studio之前没有收到此错误.

我不知道这是关于我最近投入的LifecycleObserver类,它是在kotlin中,现在我将其更改为java但在清理项目后仍然得到相同的错误:

public class LifeCycleAwareObserver implements LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void  onAppBackgrounded() {
    AnalyticsUtils.trackStartSession(true);
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onAppForegrounded() {
    AnalyticsUtils.trackStartSession(false);
}
Run Code Online (Sandbox Code Playgroud)

}

如何追踪错误的来源,以便我可以修复它?

这是我的版本依赖项:

project.ext {


        firebase_version …
Run Code Online (Sandbox Code Playgroud)

android java-8 kotlin

193
推荐指数
7
解决办法
6万
查看次数