gpt4 book ai didi

java - 改造调用排队未达到 onResponse 或 onFailure

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:52 40 4
gpt4 key购买 nike

我知道这是一个常见问题,但我做了所有这些,仍然没有解决。在我的 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;

错误returnedValue返回null。我尝试调试,但即使它也没有达到 onReponse。我知道问题一定是因为 .enqueue 是异步的,但是我如何解决这个问题并将请求返回到 ma​​inActivity

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"}

最佳答案

您可以将回调从 MainActivity 传递到 contactServer() 方法

        serverService.contactServer(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();
String returnedValue = requestAttributes.getRandomNumber();
// Do what you want here with returnedValue. You are in the activity thread(MainThread or UIThread) for example someTextView.setText(returnedValue);
Log.d("jsonAnswer", "O numero aleatorio é: " + returnedValue);
}
}

@Override
public void onFailure(Call<RequestAttributes> call, Throwable t) {
Log.e("Fail", "Failed: " + t.getMessage());
}
});

然后将其设为void方法,将回调传递给requestServerService()方法

public void contactServer(Callback<RequestAttributes> callback) {
requestServerService(callback);
}

然后实现 requestServerService() 方法,如下所示:

public void requestServerService(Callback<RequestAttributes> callback) {

Call<RequestAttributes> call = new RetrofitConfig().getServiceRequester().requestRandomNumber();

call.enqueue(callback);
}

关于java - 改造调用排队未达到 onResponse 或 onFailure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654838/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com