我为此苦苦挣扎。我在Kotlin中有声明此方法的此类,并且我需要在Java类中使用该“onSuccess”,而我不知道该怎么做。
Kotlin课:
open class Callback<T>(val app: NetworkApplication) : retrofit2.Callback<T> {
private var isSuccessful = false
var onSuccess: ((T?) -> Unit)? = null
var onSuccessWithHeaders: ((T?, HashMap<String, String>) -> Unit)? = null
var onNetworkError: (() -> Unit)? = null
var onServerError: ((String?, String?) -> Unit)? = null
var onFinish: ((Boolean?) -> Unit)? = null
var onUnauthorized: (() -> Unit) = {
// app.goToLogin()
}
override fun onResponse(call: Call<T>, response: Response<T>) {
if (response.isSuccessful) {
isSuccessful = true
onSuccess?.invoke(response.body())
response.headers()
onSuccessWithHeaders?.invoke(response.body(), getHeaders(response.headers()))
} else {
val errorResponse = getErrorResponse(response)
when (response.code()) {
401 -> onUnauthorized()
500 -> {
onServerError?.invoke(errorResponse?.codigo, errorResponse?.descripcion)
}
else -> {
onServerError?.invoke(errorResponse?.codigo, errorResponse?.descripcion)
}
}
}
onFinish?.invoke(isSuccessful)
}
override fun onFailure(call: Call<T>, t: Throwable) {
onNetworkError?.invoke()
onFinish?.invoke(isSuccessful)
}
private fun getErrorResponse(response: Response<T>): ErrorResponse? {
try {
return GsonConverterFactory.create().responseBodyConverter(
ErrorResponse::class.java!!,
arrayOfNulls(0),
null
)?.convert(response.errorBody()!!) as ErrorResponse?
} catch (e: IOException) {
e.printStackTrace()
}
return null
}
private fun getHeaders(headers: Headers): HashMap<String, String> {
val result = HashMap<String, String>()
for (i in 0 until headers.size()) {
result[headers.name(i)] = headers.value(i)
}
return result
}
}
在Java类中,我尝试了此操作,但没有运气:
首先我宣布:
private Callback<String> entidadesHabilitadasCallback = new Callback<String>((NetworkApplication)this);
然后我试图做这样的事情:
entidadesHabilitadasCallback.setOnSuccess();
但是我必须在这里放一个参数,我不知道该写些什么。
最佳答案
Kotlin Java has interop with lambda function,与java中的SAM转换相同。
您可以这样定义/设置:
entidadesHabilitadasCallback.setOnSuccess(it -> {
// use it, do something
return Unit.INSTANCE;
});
关于java - 需要在Java类中使用此方法( Kotlin ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61389378/