Tag: android

如何与Kapt3一起使用lombok

当我尝试使用Kapt3运行Java和Kotlin android应用程序时: apply plugin: ‘kotlin-kapt’ javac编译失败,无数 error: cannot find symbol 为生成的方法。 这可能是由于kapt无法生成存根导致的: ‘kapt.generateStubs’ is not used by the ‘kotlin-kapt’ plugin 所有前面提到的强迫我使用旧的kapt我可以使用: compileOnly “org.projectlombok:lombok:$lombokVer” annotationProcessor “org.projectlombok:lombok:$lombokVer” kapt “org.projectlombok:lombok:$lombokVer” kapt { generateStubs = true } 然而这在测试编译期间导致失败,因为我也使用数据绑定库: 出了什么问题:执行任务失败:app:compileXDebugUnitTestJavaWithJavac’。 java.lang.RuntimeException:无法解析数据绑定编译器选项。 参数:kapt.annotations:… \ app \ build \ tmp \ kapt \ xDebugUnitTest \ wrappers \ annotations.bscplayDebugUnitTest.txt kapt.kotlin.generated:… \ app \ […]

错误在http请求返回错误时处理UI线程

我正在使用Fuel和Rxjava进行网络通话。 我已经将我的基本URL设置为localhost,而不是在服务任何东西。 我想能够处理网络错误,所以我可以在用户界面上显示某种错误信息。 这是我的GET请求的一个例子 fun getRandom(take: Int, responseHandler: (result: WikiResult) -> Unit?) { Urls.getRandomURl(take) .httpGet() .timeout(timeout) .timeoutRead(readTimeout) .rx_object(WikipediaDataDeserializer()) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ result -> val statusCode = result.component2()?.response?.statusCode when(statusCode) { -1 -> e(statusCode.toString(), result.component2()?.cause.toString()) else -> { val (data, _) = result responseHandler.invoke(data as WikiResult) } } }, { error -> e(error.cause.toString()) }) } 在我的片段上,我在异步任务中调用上面的函数 private […]

用Swift编写Android应用程序

首先我专注于iOS,但是我已经为Java中的android做了2个应用程序,这太可怕了。 我无法解释为什么。 是Java还是Android本身,但我讨厌这么多,所以现在我不得不为Android编写另一个应用程序,所以我正在为我寻找每个选项。 这是我发现的: 科特林 – 人们说这是“Swift for android”,但我仍然坚持与Android库。 Silver – “你可以使用Swift直接对.NET,Java,Android和Cocoa API编写代码,还可以在不同平台之间共享很多非UI代码。 但在这一刻,我下载它的麻烦。 你对这件事有什么看法? 你有这两种解决方案的经验吗?

未使用@绑定匕首的方法

我有以下定义的Splash屏幕活动: @Subcomponent(modules = arrayOf( SplashActivitySubcomponent.ComponentModule::class) ) interface SplashActivitySubcomponent : AndroidInjector { @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder() @Module abstract class ComponentModule { @Binds @IntoMap @ActivityKey(SplashActivity::class) abstract fun bindSplashActivityInjectorFactory(builder: SplashActivitySubcomponent.Builder): AndroidInjector.Factory } } 我在活动中没有片段。 会发生什么是bindSplashActivityInjectorFactory未使用。 问题是我无法摆脱它,否则应用程序在运行时崩溃。 使用 @Suppress(“unused”) 是不够的,因为我仍然从kotlin-lint得到警告。 为什么在不使用时需要定义这个方法? 我能做些什么来避免这种警告? 这是我得到的错误: UnnecessaryAbstractClass – [ComponentModule] at com / xxxx / splash / di / SplashActivitySubcomponent.kt:20:5 OptionalAbstractKeyword […]

如何更改TestEngine ID以运行JUnit 5?

我有我的Kotlin Android项目的以下依赖项{ dependencies { … testImplementation “org.junit.platform:junit-platform-engine:1.0.2” testImplementation “org.junit.platform:junit-platform-gradle-plugin:1.0.2” testImplementation “org.junit.platform:junit-platform-launcher:1.0.2” testImplementation “org.junit.platform:junit-platform-suite-api:1.0.2” testImplementation “org.junit.jupiter:junit-jupiter-api:5.0.2” testImplementation “org.junit.jupiter:junit-jupiter-engine:5.0.2” testImplementation “org.junit.jupiter:junit-jupiter-params:5.0.2” } 运行我的测试时得到的错误是: org.junit.platform.launcher.core.DefaultLauncher handleThrowable WARNING: TestEngine with ID ‘junit-vintage’ failed to discover tests java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter … Caused by: java.lang.ClassNotFoundException: org.junit.runner.manipulation.Filter Exception in thread “main” java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest; 如果我的测试引擎id是junit-vintage ,那么是否可以改变它? 它似乎仍然使用junit 4引擎。 我怎样才能改变这个,所以它使用junit-jupiter? 我从我的依赖中删除了junit-4.12,所以我想知道为什么它使用junit-vintage引擎而不是junit-jupiter。 目前使用: Android Studio 3.0 […]

如何安排频繁的后台工作,支持牛轧糖以上的支持?

我正在做一个应用程序,需要经常查询服务器的更新。 我尝试了jobScheduler,但是由于牛轧糖,他们的频率限制在15分钟或更多的时间间隔。 此外,根据这个网站https://medium.com/til-kotlin/jobintentservice-for-background-processing-on-android-o-39535460e060 ,奥立奥现在杀了几分钟后长时间运行的后台进程。 我发现唯一可行的解​​决方案就是使用firebase,但是对于100多个用户来说,它的成本是25美元/月,而且我认为可以在没有播放服务的情况下删除任何设备。 有任何想法吗?

Kotlin:创建扩展函数文件?加

我正在Kotlin开发一些库,我没有find这个解决方案, 我怎么能解决这个问题, 这是说,创建扩展functionFile?.plus ,在Java中它的工作正常,但在Kotlin如何写这个代码? 先谢谢你。

Anko的uiThread偶尔没有被解雇

我目前正在使用Anko的doAsync来处理异步任务。 具体来说,我用它来解析数据对象的ArrayList的响应json ,如下所示: // Asynchronously parse server response doAsync { val itemlist = parseResponse(response) uiThread { Otto.INSTANCE.post(UpdateRedeemedVoucherViewsEvent(itemlist)) } } 大多数情况下,就像在Google Pixel(Android 8.0.0)上一样 ,这个工作很好。 我的对象被解析,并且Otto总线事件将在ui线程上被延迟。 但在极少数情况下,这个过程失败了。 到目前为止,我注意到ui线程调用不会在Galaxy S5 Mini(Android 5.1.1)上被触发。 虽然我的数据没有任何错误或exception被解析, uiThread括号中的代码片段将不会被执行。 到目前为止,我无法确定这种行为的任何理由。 没有logcat日志,什么都没有。 这个错误将不会出现。 有没有人与kotlin和/或Anko有相同或相似的问题? 更新:我自己find了一个解决方案,请参阅下面的答案以获得解释。

Android体系结构组件:如何观察数据库中的单个更改

我有几个问题,请看下面的问题: 守则 。 DAO @Dao public interface PostDao { @Query(“SELECT * FROM posts ORDER by time DESC”) LiveData<List> getAll(); @Query(“SELECT * FROM posts WHERE id = :id”) LiveData<List> getPost(String id); @Insert(onConflict = OnConflictStrategy.REPLACE) @NonNull void insert(StoryPost… posts); @Delete void delete(StoryPost post); @Update void update(StoryPost post); } D b @Database(entities = {StoryPost.class}, version = 5) @TypeConverters(Conveter.class) […]

如何在Enum常量中实现抽象函数

我想要实现的是一个简单的模式,我正在使用Java,并应根据文档在Kotlin中可行。 我只是想用一些实现相同抽象函数的常量定义来声明一个枚举类。 我的问题是,我无法设法让我的代码编译。 我总是得到相同的错误: modifier abstract not allowed here 这里是代码: enum class Program { HOME { override fun readableName(context: Context): String { return context.getString(R.string.program_home) } }, WEEKEND { override fun readableName(context: Context): String { return context.getString(R.string.program_weekend) } }, SHOPPING { override fun readableName(context: Context): String { return context.getString(R.string.program_shopping) } }; abstract fun readableName(context: Context): String […]