这是我的 RemoteDataSource 类,我将在其中编写许多 api 调用,如下所示:
suspend fun getReviewData1() = getResult {
try {
apiService.getReviewData(getCustomerId())
} catch (e: Exception) {
handleException(e)
}
}
suspend fun getReviewData2() = getResult {
try {
apiService.getReviewData(getCustomerId())
} catch (e: Exception) {
handleException(e)
}
}
现在,您可以看到,为了每一个乐趣,我需要将代码包装在try/catch块中。一切都很好,我也能捕捉到异常,但为什么要为每个函数编写这么多try/catch?相反,我需要在一个公共类中执行,这样我就可以像这样简单地调用我的函数。
suspend fun getReviewData() = getResult {
apiService.getReviewData(getCustomerId())
}
如果您想更改任何内容,您可以写一个答案并建议我,for ex in getResault()
另一个基类中的getResult():
protected suspend fun <T> getResult(call: suspend () -> Response<T>?): Resource<T> {
try {
val response = call()
if (response?.isSuccessful == true) {
val body = response.body()
if (body != null) return Resource.success(body, response.message(), response.code())
}
return error((response?.message() ?: context.getString(R.string.unable_to_reach_server)),
(response?.code() ?: AppConstants.INetworkValues.DEFAULT_ERROR_CODE))
} catch (e: Exception) {
return error(e.message ?: e.toString(), (call()?.code() ?: AppConstants.INetworkValues.DEFAULT_ERROR_CODE))
}
}
private fun <T> error(message: String, code: Int): Resource<T> {
LogUtils.d(message)
return Resource.error(null, message, code)
}
处理异常()
fun handleException(e: Exception): Response<Any> {
if (e is NoConnectivityException) {
return Response.error(AppConstants.INetworkValues.INTERNET_ERROR_CODE, getDummyResponseBody())
} else {
return Response.error(AppConstants.INetworkValues.DEFAULT_ERROR_CODE, getDummyResponseBody())
}
}
我试过这个答案,但没有成功:https://stackoverflow.com/a/46517243/14016240
请帮忙。
getResult
函数在catch块中出错。如果对call()
的第一次调用引发异常,则您将再次调用call(。我认为再次调用它没有意义,因为它可能会再次抛出,您将无法返回
Resource.error
。
如果您解决了这个问题,您将不需要在您的其他函数中使用try/的捕捉,因为
调用
将安全地包装在try/的捕捉
,并将任何错误打包到Resource.error
。
要解决这个问题:因为您已经处理了<code>响应?。code</code>在try块中,没有理由重复获取<code>call()?。catch块中的code
。您可以将其简化为
return error(e.message ?: e.toString(), AppConstants.INetworkValues.DEFAULT_ERROR_CODE)
问题内容: 大家好,我被困在一个地方,问题是我有下面显示的三个类,并且我想在AsyncTask类中实例化我的DatabaseHelper类。您能否提供帮助,如何在AsyncTask类中获取上下文? 问题解决了 MainActivity类 数据库助手 FetchData类 # 感谢Kasra,我创建了第四个类并在调用AsyncTask之前在MainActivity中使用它 ContextStatic
无法使用由try和catch块包围的@controlleradvice和@afterthollow when方法。 我可以一步一步解释 }
问题内容: 我已经在javaworld.com上阅读了两篇文章(1)(2),有关所有类字段应如何为私有,并且getter / setter方法同样糟糕。对象应该对它拥有的数据进行操作,而不是允许对其进行访问。 我目前正在为Connect Four 进行大学作业。在设计程序时,玩游戏的特工需要访问董事会的状态(以便他们可以决定移动的方向)。他们还需要将此举动传递给游戏,以便可以将其确认为合法举动。在
让我们假设我在科特林有一门课,如下所示 此外,让我们定义一个内插函数生成电子邮件域,它基于给定域的名称生成电子邮件地址 现在,正如有人说Kotlin是100%可与Java互操作的,我如何在Java类中使用这个中缀函数? 上面使用infix可能不合适,但我想知道如何在Java中使用。 如果我的理解有误,请纠正。
我使用的是改型2.0.1。我想处理所有类型的网络错误和异常(如没有网络连接,超时错误,服务器找不到等)我已经找到这个链接。但是其中一些方法在V1.8.0中被否决了。在2.0.1中如何做到这一点?
问题内容: 在Java中的各个类之间共享数据的最佳方法是什么?我有一堆变量,它们由不同的类以不同的方式在不同的文件中使用。让我尝试说明问题的简化版本: 这是我之前的代码: 现在看起来像这样: 所以无论如何,我应该每次都传递x和y(其中x,y是存储在辅助类func中的变量)吗? 我的想法是要有一个特殊的容器类,其中存放x和y。顶级类将具有容器类的实例,并使用set方法更改x,y。 我的帮助程序类还将