Articles of kotlin

Android数据绑定和Kotlin

我正在将我的Android应用程序从Java转换为Kotlin。 它正常工作,除非我尝试转换使用Android数据绑定库的文件。 在这种情况下,Android Studio会在编译时抱怨未解析的引用: Error:(10, 44) Unresolved reference: AdapterHistoriesListBinding 其中AdapterHistoriesListBinding是应由数据绑定库生成的文件的名称。 它在Java中正常工作,所以我猜这是Kotlin的一个问题。 我使用的是Android Studio 2.0.0-beta6,Android Gradle Plugin 2.0.0-beta6和Kotlin 1.0。 有没有什么可以使数据绑定库与Kotlin一起工作?

Observable.combine在kotlin中的最新types推断

我在我的项目中使用RxJava2,Kotlin-1.1和RxBindings。 我有简单的登录界面,默认情况下禁用“登录”按钮,我想只在用户名和密码的edittext字段不为空时启用按钮。 LoginActivity.java Observable isFormEnabled = Observable.combineLatest(mUserNameObservable, mPasswordObservable, (userName, password) -> userName.length() > 0 && password.length() > 0) .distinctUntilChanged(); 我无法将上述代码从Java翻译成Kotlin: LoginActivity.kt class LoginActivity : AppCompatActivity() { val disposable = CompositeDisposable() private var userNameObservable: Observable? = null private var passwordObservable: Observable? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) initialize() } fun initialize() { userNameObservable […]

Dagger 2与Kotlin的多重绑定

我的dagger 2模块中有以下片段 @Singleton @Provides @ElementsIntoSet fun providesQueries(foo: Foo): Set{ val queries = LinkedHashSet() queries.add(foo) return queries } 我试着以这种方式注入 @Inject lateinit var foo: Set 但是dagger显示一个错误,表示Dagger无法在没有@Provides或@Produces方法的情况下提供java.util.Set。 我在java中也做了同样的工作。 有人知道为什么会失败吗?

Android SDK类上的Kotlin扩展function的unit testing

Kotlin扩展function很棒。 但是我怎么能对它们进行unit testing呢? 特别是那些Android SDK提供的类(例如Context,Dialog)。 我在下面提供了两个例子,如果有人可以分享我如何对它们进行unit testing,或者如果我真的想对它们进行unit testing,我需要以不同的方式编写它们。 fun Context.getColorById(colorId: Int): Int { if (Build.VERSION.SDK_INT >= 23) return ContextCompat.getColor(this, colorId) else return resources.getColor(colorId) } 和 fun Dialog.setupErrorDialog(body : String, onOkFunc: () -> Unit = {}): Dialog { window.requestFeature(Window.FEATURE_NO_TITLE) this.setContentView(R.layout.dialog_error_layout) (findViewById(R.id.txt_body) as TextView).text = body (findViewById(R.id.txt_header) as TextView).text = context.getString(R.string.dialog_title_error) (findViewById(R.id.txt_okay)).setOnClickListener{ onOkFunc() dismiss() } return this […]

kapt Build使用Dagger Android处理器失败

我试图在我的项目中使用Kotlin Annotation Processing Tool (kapt)包含Dagger Android处理器( 此处记录)。 我在build.gradle文件中包含了正确的依赖build.gradle : apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-kapt’ android { compileSdkVersion 25 buildToolsVersion “25.0.2” defaultConfig { applicationId “com.example.app” minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } sourceSets { main.java.srcDirs += ‘src/main/kotlin’ } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } […]

将LiveData与数据绑定结合使用

随着Android体系结构组件的稳定,我开始将所有基本的ViewModel更新为ViewModel的新实现。 根据我的理解,建议使用LiveData来保存Model类,因为它可以更好地处理生命周期。 我喜欢使用Data Binding因为它使代码在Java / Kotlin方面更加清晰,并且不需要“观察”值更改来更新UI。 但是,如果Model (或ViewModel)扩展BaseObservable而LiveData不扩展,则使用Data Binding的布局仅监视数据更改。 我理解LiveData的主要目标之一LiveData编程方式观察和更新UI,但对于简单的更新, Data Binding非常有用。 这个问题已经报道过( GitHub和Stack Overflow ),并且首先说版本1.0会有它,现在据说这个function正在开发中。 为了同时使用LiveData和Data Binding ,我创建了一个非常简单的类实现,它扩展了BaseObservable : import android.arch.lifecycle.LiveData import android.arch.lifecycle.MutableLiveData import android.databinding.BaseObservable class ObservableMutableLiveData() : BaseObservable() { private var data: MutableLiveData = MutableLiveData() constructor(data: T) : this() { this.data.value = data } public fun set(value: T) { if (value != data.value) […]

这种types有一个构造函数,必须在这里初始化–Kotlin

我刚开始使用Kotlin试用Android应用。 我只想inheritance这样的Application类: class SomeApp : Application { } 但编译器提出了警告: 并建议将其更改为: class SomeApp : Application() { override fun onCreate() { super.onCreate() } } 我在文档中读到了主要和辅助构造函数 。 所以如果超类有一个主构造函数,那么有必要在这里写吗? 像Application类有自己的构造函数 public Application() { super(null); } 然后有必要有派生的主要构造函数? 或者我不能像Java那样做: class SomeApp : Application { constructor SomeApp(){ super(); } } 或者这个错误暗示其他什么? 任何人都可以详细解释我吗? 我对这门语言很陌生,这对我来说很奇怪。 编辑:在java中,我可以执行以下操作: class SomeApp extends Application{ } 它有隐式构造函数,所以我不必写: class SomeApp […]

Kotlin中的Retrofit2 + SimpleXML:MethodException:Annotation必须标记set或get方法

我想从API获取XML数据,并使用Kotlin中的Retrofit2 + SimpleXML将其映射到Kotlin模型对象。 但是,我收到了来自SimpleXML的以下错误消息。 org.simpleframework.xml.core.MethodException:注释@ org.simpleframework.xml.Element(data = false,name =,required = true,type = void)必须标记set或get方法 这是获取的XML数据 Success XXXXXXXXXXXXXXXXXXXX 4294967295 Kotlin模型对象如下 @Root(name = “response”) public class User() { @Element public var result: String? = null @Element public var token: String? = null @Element public var uid: String? = null } 和APIClient如下。 interface MyService { @GET(“/testLogin.xml”) fun getUser(): Call […]

为Kotlin创建POJO类

我想为Kotlin创建POJO类,因为我们知道www.jsonschema2pojo.org将JSON转换为POJO,因此我们可以将它与gson一起使用。 任何人都知道如何快速为Kotlin创建Gson POJO ? 编辑: 我知道它使用数据类,但有没有最简单的方法来创建它?

实时模板在Kotlin中不起作用

希望您使用默认情况下由Android提供的实时模板。 喜欢: Generate debug log statement: “logd”+TAB Generate error log statement: “loge”+TAB Generate info log statement: “logi”+TAB Generate TAG declaration: “logt”+TAB Generate parameter logging: “logm”+TAB Generate method return log: “logr”+TAB 它在KOTLIN中不可用? 它在Android Studio 3.0 Canary版本中不可用吗?