在Kotlin中引用和使用Java对象

  • 本文关键字:Java 对象 Kotlin 引用 java kotlin
  • 更新时间 :
  • 英文 :


当上下文设置为'this'时,我如何在Kotlin中引用和使用Java对象。我引用了一个用Java编写的第三方库(mobilething)。'this'是第三方提供的示例代码中使用的上下文。

下面是实现的Java示例。

import com.mobilething.control_sdk.ManageDevice.ManageDevice;
try {
ManageDevice device = new ManageDevice(this);
device.initiateUnlock();
} catch (ManageDeviceException e) {
Log.e(TAG, e.getMessage(), e);
}

下面是Kotlin

中的尝试实现
class LoginViewModel(private val loginRepository: LoginRepository) : ViewModel() {
private val _loginForm = MutableLiveData<LoginFormState>()
val loginFormState: LiveData<LoginFormState> = _loginForm
private val _loginResult = MutableLiveData<LoginResult>()
val loginResult: LiveData<LoginResult> = _loginResult
fun login(username: String, password: String) {
// can be launched in a separate asynchronous job
val result = loginRepository.login(username, password)
if (result is Result.Success) {
_loginResult.value = LoginResult(success = LoggedInUserView(displayName = result.data.displayName))
val device = ManageDevice(Context)
try {
device.initiateUnlock()
}catch (e: ManageDeviceException){
//Logger.(Test::Class.java.name).warning(e.message)
}
} else {
_loginResult.value = LoginResult(error = R.string.login_failed)
}
}
}

错误
Classifier 'Context' does not have a companion object, and thus must be initialized here

错误是由于使用了类Context,而不是类的实例。这工作。

class LoginViewModel(private val loginRepository: LoginRepository) : ViewModel() {
private val _loginForm = MutableLiveData<LoginFormState>()
val loginFormState: LiveData<LoginFormState> = _loginForm
private val _loginResult = MutableLiveData<LoginResult>()
val loginResult: LiveData<LoginResult> = _loginResult
fun login(username: String, password: String) {
// can be launched in a separate asynchronous job
val result = loginRepository.login(username, password)
if (result is Result.Success) {
_loginResult.value = LoginResult(success = LoggedInUserView(displayName = result.data.displayName))
val device = ManageDevice(this@LoginViewModel)
try {
device.initiateUnlock()
}catch (e: ManageDeviceException){
//Logger.(Test::Class.java.name).warning(e.message)
}
} else {
_loginResult.value = LoginResult(error = R.string.login_failed)
}
}

最新更新