【发布时间】:2019-04-13 00:46:39
【问题描述】:
我知道这是一个常见的问题,但我做了所有这些,仍然没有解决。在我的 MainActivity 中,我收到了来自 ServerService.java 的调用,如下所示:
String randomNumber = serverService.contactServer();
在ServerService.java中,contactServer()会调用包含.enqueue的方法:
public String contactServer() {
return requestServerService();
}
而 requestServerService() 包含代码:
public String requestServerService() {
Call<RequestAttributes> call = new RetrofitConfig().getServiceRequester().requestRandomNumber();
call.enqueue(new Callback<RequestAttributes>() {
@Override
public void onResponse(Call<RequestAttributes> call, Response<RequestAttributes> response) {
if (!response.isSuccessful()) {
Log.i("Err", "Err: " + response.code());
} else {
RequestAttributes requestAttributes = response.body();
returnedValue = requestAttributes.getRandomNumber();
Log.d("jsonAnswer", "O numero aleatorio é: " + returnedValue);
}
}
@Override
public void onFailure(Call<RequestAttributes> call, Throwable t) {
Log.e("Fail", "Failed: " + t.getMessage());
}
}); return returnedValue;
error 是 returnedValue 返回 null。我尝试调试,但即使它没有达到 onReponse。我知道问题一定是因为 .enqueue 是异步的,但是我该如何解决这个问题并将请求返回给 mainActivity?
Retrofit 的配置:
public RetrofitConfig() {
this.retrofit = new Retrofit.Builder()
.baseUrl("localhost:3000/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public ServiceRequester getServiceRequester() {
return this.retrofit.create(ServiceRequester.class);
}
POJO:
public class RequestAttributes {
@SerializedName("randomNumber")
private String randomNumber;
public String getRandomNumber() {
return randomNumber;
}
public void setRandomNumber(String randomNumber) {
this.randomNumber = randomNumber;
}
@Override
public String toString() {
return "RequestAttributes{" +
", randomNumber='" + randomNumber + '\'' +
'}';
}
}
请求:
@GET("api/requestRandomNumber")
Call<RequestAttributes> requestRandomNumber();
如果我通过浏览器请求,JSON 答案:
{"randomNumber":"u845gq"}
【问题讨论】:
-
显示你的反手json是什么?
-
分享你的基本 url 类
-
你遇到了什么错误?
-
你的基本网址是什么
-
@JoãoVitorBrasil 这与回调无关。当您调用
enqueue改造时,在另一个线程中执行调用,因此 return 语句return returnedValue;将始终返回初始值,在您的情况下为null。