RuntimeException处理最佳实践

RuntimeExceptions应该表示编程错误,并且当我的observables里面的东西抛出RuntimeException时,我希望我的应用程序崩溃。 做这个的最好方式是什么? 现在我正在考虑这个解决方案(这是Kotlin,但我希望这是可以理解的) fun Observable.subscribeCrashOnRuntimeException(onNext: (T) -> Unit, onError: (Throwable) -> Unit) { this.subscribe({ onNext(it) }, { e -> if (e is RuntimeException) { throw e } else { onError(e) } }) } fun usageExample() { val observable = Observable.just(1) observable.subscribeCrashOnRuntimeExceptions( { next -> Log.d(“TAG”, “next: $next”) }, { e -> Log.d(“TAG”, “error: $e”) } […]

覆盖意图额外

我使用下面的代码创建通知(Kotlin) val builder = NotificationCompat.Builder(ctx) …….. .setContentIntent(PendingIntent.getActivity(ctx, 891, ctx.newIntent() .putExtra(“id”, member.id) .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0)) 所以当通知被点击MainActivity将选择用户,从哪个通知到达。 override fun onNewIntent(intent: Intent?) { val id = intent?.getStringExtra(“id”) ?: return selectUser(extra) } 我从2个不同的用户发送2个通知。 点击第一次通知后,它工作正确(id == _ User1UUID)并选择用户。 然后我按回来,从第二个用户发送另一个通知,点击它,意图仍然包含以前的用户ID并选择它(通过断点检查)。 我知道,这是因为FLAG_ACTIVITY_REORDER_TO_FRONT ,但我必须只保留MainActivity一个实例。

Android 3.0 Canary生成错误:不支持major.minor版本52.0

更新:我解决了从https://stackoverflow.com/a/37712635/288724的建议 这个链接没有提供一个很好的解决方案Android Studio 不支持major.minor版本52.0 但是这个链接https://stackoverflow.com/a/37712635/288724帮助我。 我看到很多人遇到过类似的问题。 然而,我的Android Studio 2.3.2完全正常,当我使用Android Studio 3.0 Canit 1和kotlin支持时,问题就显示出来了。 错误信息如下所示: Error:(1, 1) A problem occurred evaluating project ‘:app’. > java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0 有人可以给我任何建议吗? 非常感谢!

ListView:平滑滚动到底部

当一个按钮被点击,我想应用程序顺利滚动到列表视图的底部。 目前这是我的执行(kotlin) listview.post { listview.smoothScrollToPosition(adapter.count – 1) } 然而,这并不总是正常工作:一些列表项目包含一些可扩展的部分(即其可见性可以是可见或无效的视图),最初是隐藏的。 但是,当这些部分展开时,该function有时不会滚动到结尾,而是滚动到结束之前的位置。 我怎样才能可靠地滚动到列表视图的末尾?

在RxKotlin / RxJava中用BehaviorSubject自动创建热可观察对象

目前我正在使用RxKotlin在Kotlin上建立一个项目。 我与Rx的背景主要是基于RxJS。 我经常用于在Typescript中创建hot observables模式的模式看起来是这样的: private dataStore: IFoo; private dataStoreSubject: BehaviorSubject = new BehaviorSubject(this.dataStore); public dataStoreObservable: Observable = Observable.from(this.dataStoreSubject); public getNetworkData(): Observable { return this.http.get() .map((response: IResponse) => { this.dataStore = response; this.dataStoreSubject.next(this.dataStore); return this.dataStore; }); } 这将允许我暴露一个Observable ,而不暴露Subject和后续的subject.next(); 方法。 我的问题是:在RxKotlin或RxJava中建立类似逻辑最常用的方法是什么?

Kotlin Foo :: class.java“Unresolved Reference:Java”错误

我正在尝试将我的HomePage.class java代码转换为Kotlin。 我正在按照Kotlin.org上的说明进行操作 : 的getClass() 为了从对象中检索types信息,我们使用javaClass扩展属性。 val fooClass = foo.javaClass 而不是Java的Foo.class使用Foo::class.java 。 val fooClass = Foo::class.java 我有一个名为HomePage的类扩展了AppCompatActivity(在Android中)。 我正在使用Android Studio。 我尝试做HomePage::class.java ,它有一个错误: Unresolved reference: java 我如何得到这个工作? 谢谢。

用翻新和moshi填充微调

我是Android开发人员(包括java或kotlin)的初学者。 我正在尝试用改造和moshi从json填充微调器,但我不知道如何将其填充到微调器中。 说实话,我不知道Json数据的返回是否正确,因为Log.d()返回不是作为dump()laravel或php的细节。 脚本在活动onCreate(请阅读脚本的评论,我把Log.d()调试结果) Log.d() val task = object : AsyncTask<Void, Void, Response<List>>() { override fun doInBackground(vararg params: Void): Response<List> { val typeAPI = RestAPI() val callResponse = typeAPI.getNews() val response = callResponse.execute() return response } override fun onPostExecute(response: Response<List>) { if (response.isSuccessful) { val news = response.body() Log.d(“test:”, news!![0].data.toString()) // method ‘java.lang.String com.example.mockie.tigaer.api.TypeDataResponse.toString()’ on […]

Docker化Springboot应用程序

上下文:这是一个用Kotlin编写的应用程序,并使用Maven的Spring引导。 基本上,我想知道我在做什么。 运行mvn install然后用相应的jar文件创建target文件夹。 因此,Dockerfile将只是将jar文件复制到容器的工作目录中,然后运行java -jar WHATEVER.jar 。 简单的Dockerfile FROM openjdk:8-jre-alpine COPY target/app-DEV-SNAPSHOT.jar . EXPOSE 8089 CMD [“java”, “-jar”, “./app-DEV-SNAPSHOT.jar”] 但是我想说,使用多级构建对我来说更有意义,并且在第一阶段生成jar文件,并在第二阶段执行它。 我试过这个第二种方法,但是我面临着一个与main class doesn’t exist 多阶段Dockerfile: FROM maven:3.5.2-jdk-8-alpine as BUILD ENV APP_HOME=/usr/src/service COPY ./src /usr/src/service COPY pom.xml /usr/src/service WORKDIR /usr/src/service RUN mvn install FROM openjdk:8-jre-alpine COPY –from=BUILD /usr/src/service/target/app-DEV-SNAPSHOT.jar ./ EXPOSE 8080 CMD [“java”, “-jar”, “./app-DEV-SNAPSHOT.jar”] […]

为什么我不能在这个Rx变压器中使用接口作为通用types?

我在Kotlin中有以下数据类作为参考: interface GenericResponse { val error: Error? fun hasErrorObject(): Boolean = error != null } data class LoginResponse( val name: String, val auth: String, @SerializedName(“error”) override val error: Error? = null ) : GenericResponse LoginResponse实现GenericResponse 。 我正在使用以下方式的Retrofit API: @POST(“******”) fun createSession(@Body body: LoginBody): Single<Response> 此外,如果存在如下所示,我使用一个变换器从LoginResponse提取错误: class ExceptionTransformers { fun wrapRetrofitExceptionSingle(): (Single<Response>) -> Single { return […]

当我们需要重写Handler的handleMessage()方法

我正在学习Looper和Handler,大部分时间我都读到它用来和UI线程进行通信。 但是后来我看到Handler子类( handleMessage(msg : Message)的代码被混淆了,因为我们可以和GUI线程交互,而不需要扩展Handler类。 以kotlin android为例。 val handler = Handler(); handler.post({ // update GUI here }); 所以我可以很容易地与GUI线程交互,而不需要实现子类或者handleMessage() 。 让我再解释一下我的问题。 有时我看到这个例子。 class HandlerSub : Handler(){ override fun handleMessage(msg : Message){ // update GUI here. } } val handler = HandlerSub(); handler.send({ // send something.. }); 所以在上面的例子中,两个代码都用于更新/与GUI线程交互。 但第一个代码更容易和更少的代码与GUI交互。 那么handleMessage()方法的真正目的是什么,什么时候应该实现呢?