我使用改造2.7.1与静态编程语言协程。
我的改装服务定义如下:
@PUT("/users/{userId}.json")
suspend fun updateUserProfile(
@Path("userId") userId: String,
@Query("display_name") displayName: String) : Void
此调用返回HTTP 204无内容响应,这会导致改装时崩溃:
kotlin.KotlinNullPointerException: Response from com.philsoft.test.api.UserApiService.updateUserProfile was null but response body type was declared as non-null
at retrofit2.KotlinExtensions$await$2$2.onResponse(KotlinExtensions.kt:43)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:129)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
如何使用协程处理改造中的204响应而不崩溃?
用示例代码解释@Dmitri的答案:
>
在你的APIInterface中,这样调用你的API,
@GET(AppConstants.APIEndPoints.GET_NEWS)
suspend fun getNews(
@Query("limit") limit: String,
): Response<NewsListResponseModel>
其中,响应为2。响应
在调用API的地方,检查函数的状态代码,如apiResponse.code()
。
val apiResponse = apiEndPointsInterface.getNews(limit)
if (apiResponse.code() == HttpURLConnection.HTTP_OK) {
//response success
ResultOf.Success(apiResponse.body()!!))
} else {
//handle your other response codes here
ResultOf.Failure("No Data Found.", null))
}
您可以使用Response
您可以使用以下代码处理这些情况:
return try {
val result = apiCall.invoke()
return if (result is Response<*>) {
if (result.code() >= 400) {
// create an error from error body and return
} else {
// return success result
}
} else {
// directly return success result
}
} catch (t: Throwable) {
// create an error from throwable and return it!
}
根据这一点,使用Response
改装无内容问题
我使用Refught2调用kotlin协同程序的API,但API的状态代码为200、400和700。当请求API和响应状态代码为400或700时,“withTimeout”协同程序可能会异常崩溃。我想处理带有“withTimeout”协同程序的状态代码400和700响应消息,或者如何自定义“协同程序”谢谢。 这是我的密码 错误消息
最近,我通过学习CodeLabs教程学习了kotlin coroutine。经过一些实践,我想知道我是否可以用java编写相同的代码。首先,我在MyKotlinFragment中编写了一个简单的kotlin代码。kt文件如下: 在我的片段中调用了;它起作用了。 接下来,我打开了一个名为MyRoutineFragment的java文件。java在同一个项目中,但我无法让它工作。 我无法将第一个文件转
我正在尝试使用SimpleXML将改装xml响应序列化到一个对象中。 但是出现以下例外情况: org.simpleframework.xml.core.值必需异常:无法满足@org.simpleframework.xml.ElementList(data=false,空=true,入口=,内联=true,名称=ALLFile,必需=true,类型=无效)字段'file" 响应示例: 对象: 我收到
当没有数据avilable时,它返回以下JSON: http://www.omdbapi.com/?t=asdasdas
我使用的是最新版本的改造,改造2,v2.0.0-beta3。API响应是User对象或空响应(空值)。如果我发送正确的用户名/密码,那么句柄将进入带有成功用户对象的响应方法。但是如果发送错误的密码,那么API将不返回任何内容,响应头中的值很少。但是我在onFailure(可抛出)中得到了MalformedJsonExc0019。 “com.google.gson.stream.MalformedJ
我看到的主题,如如何下载文件在Android使用改造库?,他们使用和RxJava/回调。 我有Kotlin、协同程序、改装2.6.0和类似于中的查询https://stackoverflow.com/a/56473934/2914140: 我有一个改装客户: 如果令牌参数正确,查询将返回PDF文件: 如果是错误的,它将返回带有错误描述的JSON: 因此,ExportResponse是一个包含JSO