Tag: android

如何使用Realm的方法与Kotlin

我正在尝试做类似的事情: val barcodes = arrayOf("123", "456", "789") realm.where(Product::class.java).in("barcode", barcodes).findAll() 但是“in”是一个Kotlin函数,我无法访问RealmQuery对象的in(String filedName,String [] values)方法。 目前我有一个java类来完成这个工作,并返回结果,但我想知道是否有一个更优雅的解决方法呢?

新的建筑与匕首和Kotlin

我在Kotlin的New Architecture组件中遇到了一个问题,那就是当我用建议的方式(在onCreate()方法)中创建ViewModel组件时,结果如下所示: 在活动方向改变之后,我得到和以前一样的ViewModel实例 这是我创造这个的方式 override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_list) val arrayMap = ArrayMap<Class<out ViewModel>, ViewModel>() arrayMap.put(ListViewModel::class.java, ListViewModel(webApi, repoDao)) val factory = ViewModelFactory(arrayMap) listViewModel = ViewModelProviders.of(this, factory).get(ListViewModel::class.java) listViewModel.items.observe({ this.lifecycle }) { Toast.makeText(this, it?.joinToString { it + " " } ?: "null", Toast.LENGTH_SHORT).show() } 但是当我使用Dagger注入ListViewModel时,每次重新创建Activity时都会得到ListViewModel的新实例。 这是一个Dagger ListActivityModel的代码。 @Module @ListActivityScopeclass ListActivityModule { @Provides @ListActivityScope fun […]

如果没有kotlin中的@ Provide-或@ Produces注解方法,则不能提供上下文

我在Kotlin使用Dagger进行依赖注入。 现在这里是必要的类 ActivityModule @Module class ActivityModule (val activity : Activity){ @Provides @ActivityContext fun provideContext() : Context{ return activity } } ActivityComponent @PerActivity @Component(dependencies = arrayOf(ApplicationComponent::class), modules = arrayOf(ActivityModule::class)) interface ActivityComponent { fun inject(activity: MainActivity) } 主要活动 @Inject @ActivityContext lateinit var context:Context override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) DaggerActivityComponent.builder() .applicationComponent(MainApplication.getInstance().getApplicationComponent()).activityModule(ActivityModule(this)).build() .inject(this); 现在我收到以下错误 error: android.content.Context cannot be […]

Kotlin卡普失败 – 只看到Android API级别1的来源

我看到一些奇怪的行为,导致:app:kaptQaDebugKotlin尝试升级到Android Gradle插件3.0时, :app:kaptQaDebugKotlin失败。 用@TargetApi(VERSION_CODES.KITKAT)注解的方法失败, cannot find symbol ( VERSION_CODES.KITKAT ) …但在与方法内联使用时发现VERSION_CODES.KITKAT 找不到符号DialogInterface.OnShowListener (在API级别8中添加) ..但找到DialogInteface.OnClickListener (在API级别1中添加) 找不到符号Application.ActivityLifecycleCallbacks (在api level 14中添加) 注意:Android Studio能够看到所有这些cannot find symbol类的来源( cmd + B作品) 版本 compileSdkVersion: 25 buildTools: 26.0.2 Kotlin版本: 1.1.51 AGP: 3.0.0 gradle包装: 4.3 支持lib: 24.2.1 (这也难以升级,但是我尝试了25.4.0 ,仍然没有运气) 匕首: 2.0.2 (卡在这个旧版本,不能升级不幸) 使用AGP 3.0.0 java 8 desugar功能 使用kotlin-kapt插件。 自动值类正确生成。 任何想法发生了什么? 它看起来像kapt任务是以某种方式使用Android API级别1的来源,我不知道如何解决这个问题

Gson无法解析Kotlin中的字符串json格式数据

我正在Kotlin写一个应用程序。 我有一个来自web服务的原始JSON字符串,我需要使用它与Gson。 我正在这样做: val gson = Gson() val friends = gson.fromJson(response.rawResponse, JsonElement::class) 但编译器无法找到正确的fromJson方法重载,而现在可用( fromJson(json: String!, typeOfT: Type!) )。 这是错误的: Error:(65, 50) None of the following functions can be called with the arguments supplied: public open fun <T : Any!> fromJson(json: JsonElement!, classOfT: Class<JsonElement!>!): JsonElement! defined in com.google.gson.Gson public open fun <T : Any!> fromJson(json: JsonElement!, […]

Android Studio 3.0中的Plain Kotlin模块,`api`不支持?

在Gradle插件3.0(Android Studio 3.0)中开始, compile命令已被替换为api和implementation 。 这里解释https://blog.mindorks.com/implementation-vs-api-in-gradle-3-0-494c817a6fa 但是,对于下面的纯Kotlin模块,我不能使用api 。 即当我执行同步时,下面的代码将会有错误 apply plugin: 'kotlin' dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) api "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" } 错误是 Could not find method api() for arguments [org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.2-4] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. Open File` 我不得不使用“不推荐” compile 。 为什么在纯粹的kotlin模块中不支持api ?

Saripaar formvalidation不能在kotlin中第二次使用

我正在使用saripaar进行表单验证。 我在fragmentA中有一些编辑文本,验证成功时,视图将切换到fragmentB。 碎片中的切刀和saripaar注释。 @NotEmpty @BindView(R.id.nameEditText) lateinit var nameEditText: EditText Saripaar初始化: val validator = Validator(this) validator.setValidationListener(this) 验证字段: validator.validate() 验证是第一次正常工作。 当从fragmentB返回到fragmentA时,验证不起作用,它将直接调用validationsuccess。 在onValidationSucceeded上 ,我正在使用下面的函数切换到fragmentB。 fun openFragment(fragment: Fragment) { val ft = activity.supportFragmentManager.beginTransaction() ft.replace(R.id.container, fragment) ft.addToBackStack(null) ft.commitAllowingStateLoss() } 这个问题只出现在kotlin中,而不是在java中。

如何在kotlin协议上指数退避重试

我正在使用扩展方法在网络请求中使用kotlin协同程序来调用类 public suspend fun <T : Any> Call<T>.await(): T { return suspendCancellableCoroutine { continuation -> enqueue(object : Callback<T> { override fun onResponse(call: Call<T>?, response: Response<T?>) { if (response.isSuccessful) { val body = response.body() if (body == null) { continuation.resumeWithException( NullPointerException("Response body is null") ) } else { continuation.resume(body) } } else { continuation.resumeWithException(HttpException(response)) } } […]

正确的方法来注入匕首2 + Kotlin + ViewModel

class SlideshowViewModel : ViewModel(){ @Inject lateinit var mediaItemRepository : MediaItemRepository fun init() { What goes here? } 所以我想学习Dagger2,这样我可以让我的应用程序更易于测试。 问题是,我已经集成了Kotlin,并且正在开发Android架构组件。 我明白,构造函数注入是可取的,但这是ViewModel不可能的。 相反,我可以使用lateinit为了注入,但我不知道如何注入。 我是否需要为SlideshowViewModel创建一个组件,然后注入它? 还是我使用应用程序组件? gradle这个: apply plugin: 'com.android.application' apply plugin: 'kotlin-android' kapt { generateStubs = true } dependencies { compile "com.google.dagger:dagger:2.8" annotationProcessor "com.google.dagger:dagger-compiler:2.8" provided 'javax.annotation:jsr250-api:1.0' compile 'javax.inject:javax.inject:1' 应用组件 @ApplicationScope @Component (modules = PersistenceModule.class) public interface ApplicationComponent […]

如何在Kotlin中声明一个函数作为变量

所以我试图在Kotlin中创建一个监听器。 我只想传递一个将在我的代码中执行的方法。 喜欢这个: override fun setButtonClickListener(listener: (text: String) -> Unit) { this.listener = listener } 但是,当我宣布我的听众,我必须这样声明: private var listener : (text: String) -> Unit = null!! 否则,我的AS会抱怨。 但是这个 !! 在一个空对象接缝很奇怪。 我应该如何声明这个监听器? 谢谢!