我正在尝试将Android应用程序从Java转换为Kotlin.应用程序中有一些单身人士.我在没有构造函数参数的情况下为单例使用了伴随对象.还有另一个单例采用构造函数参数.
Java代码:
public class TasksLocalDataSource implements TasksDataSource {
private static TasksLocalDataSource INSTANCE;
private TasksDbHelper mDbHelper;
// Prevent direct instantiation.
private TasksLocalDataSource(@NonNull Context context) {
checkNotNull(context);
mDbHelper = new TasksDbHelper(context);
}
public static TasksLocalDataSource getInstance(@NonNull Context context) {
if (INSTANCE == null) {
INSTANCE = new TasksLocalDataSource(context);
}
return INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我在kotlin的解决方案:
class TasksLocalDataSource private constructor(context: Context) : TasksDataSource {
private val mDbHelper: TasksDbHelper
init {
checkNotNull(context)
mDbHelper = TasksDbHelper(context)
}
companion object {
lateinit var INSTANCE: TasksLocalDataSource
private val …Run Code Online (Sandbox Code Playgroud) 我有一个有几个翻译的应用程序,我想删除一些字符串.
我怎样才能重构和删除它们一次,例如在默认的strings.xml文件中,并自动将删除传播到其他翻译的其他strings.xml文件?谢谢
如何使用枚举将JSON解析为模型?
这是我的枚举类:
enum class VehicleEnumEntity(val value: String) {
CAR("vehicle"),
MOTORCYCLE("motorcycle"),
VAN("van"),
MOTORHOME("motorhome"),
OTHER("other")
}
Run Code Online (Sandbox Code Playgroud)
我需要解析type一个枚举
"vehicle":{"data":{"type":"vehicle","id":"F9dubDYLYN"}}
编辑
我已经尝试过标准方法,只需将我的枚举传递给POJO,它总是为空
所以IntentService当我运行一次时,我运行正常.它需要一个图像处理它然后输出一系列RGB值.
但我现在需要它做的是多次运行批处理一系列图像.我的第一次尝试涉及在我的主类中调用停止服务,然后创建并运行IntentService的新实例.但是当我调用StopService时,这个崩溃了.
有没有正确的方法来做到这一点?
因此,我想实现 API 响应的示例,如视频 droidcon NYC 2017 - Advanced Networking with RxJava + Retrofit中所示
这是我的代码:
演示者.java
compositeDisposable.add(RetrofitClient.createService(GetApi.class)
.getResponseFromServer(token)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseFromServer>() {
@Override
public void accept(ResponseFromServer responseFromServer) throws Exception {
mView.setResponseObject(responseFromServer);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
if (throwable instanceof HttpException) {
int responseCode = ((HttpException) throwable).code();
}
}
}));
Run Code Online (Sandbox Code Playgroud)
所以在这里,当我从服务器收到一些 4xx 错误响应时,我可以去Throwable获取响应代码,如果响应正常,我可以获取我的对象,一切都很酷。
然而,在上面的视频示例中,那家伙建议我用ResponseFromServer响应包装我的代码,如下所示:
Single<Response<ResponseFromServer>> getResponseFromServer(@Header("X-Authorize") String token);这样我也可以访问响应代码,但在这种情况下,我的Throwable永远不会被调用,所以我只能在第一个接受中访问代码方法,但在视频中他发现了该Throwable部分的错误。所以,我无法弄清楚我做错了什么?也许我使用了错误的观察者?
将我的 Android 应用程序 Java 代码转换为 Kotlin,我使用数据绑定将自定义字体设置为 TextViews。我曾经从 XML 传递字体字符串,如下所示
app:customFont="@{'harmonia-semibold.ttf'}"
将@BindingAdapter 转换为 kotlin 后,上面的行不起作用,并且预期会抛出expr 或 lambda 表达式,出现 '''错误。用 getter 方法替换硬编码的字符串值非常有效。下面是我的绑定适配器,不知道为什么它不采用硬编码字符串
@JvmStatic
@BindingAdapter("app:customFont")
fun setCustomFont(textView: TextView, font: String) {
textView.typeface = Typeface.createFromAsset(textView.context.assets, font)
}
Run Code Online (Sandbox Code Playgroud)
谢谢