Retrofit返回布尔值

3

如果saveChanges函数返回true值,我希望运行changesHasBeenSaved。当Retrofit完成后,我如何获取布尔值、字符串或整数等任何值?这是否可能?

我需要一个类似以下的函数:

public boolean saveChanges()
{
    Boolean output = false;
    RequestAPI requestAPI = Requests.getRetrofit();
    Call<Object> jsonObjectCall = requestAPI.readAllCategoeies();

    jsonObjectCall.enqueue(new Callback<Object>() {
        @Override
        public void onResponse(Call<Object> call, Response<Object> response) {
            if(response.body() != null) {
                output = true;
            }

        }

        @Override
        public void onFailure(Call<Object> call, Throwable t) {
            call.cancel();
        }
    });

    return output;
}

写一个方法然后在if语句内调用它怎么样? - saiedmomen
能给我展示一个例子吗? - Ulugbek Nuriddinov
当Retrofit完成时,我如何获取布尔值、字符串或整数等任何值?你想从哪里获取它?你是指想解析API的响应吗? - Krishna Sharma
我需要一个布尔值,如果 Retrofit 完成则返回 true,否则返回 false... 我想在 saveChanges() 函数中调用它。 - Ulugbek Nuriddinov
我是说为什么你不在if语句内部调用changesHasBeenSaved呢? - saiedmomen
saveChanges函数位于Updates.class中 changesHasBeenSaved函数位于Profile.class中 - Ulugbek Nuriddinov
2个回答

6

由于retrofit工作异步,你应该将方法的返回类型从boolean更改为void

你应该传递监听器/回调以在回调中获取状态。

首先创建如下的回调接口:

public interface ApiCallback {
   void onResponse(boolean success);
}

以下是“saveChanges”函数的代码示例:
public void saveChanges(final ApiCallback callback)
{
    RequestAPI requestAPI = Requests.getRetrofit();
    Call<Object> jsonObjectCall = requestAPI.readAllCategoeies();
    jsonObjectCall.enqueue(new Callback<Object>() {
        @Override
        public void onResponse(Call<Object> call, Response<Object> response) {
            callback.onResponse(response.body() != null);
        }

        @Override
        public void onFailure(Call<Object> call, Throwable t) {
            call.cancel();
            callback.onResponse(false);
        }
    });
}

然后你需要像下面这样调用saveChanges方法。
saveChanges(new ApiCallback () {
   public void onResponse(boolean success){
        if(success){
          // do something
        } else{
          // do something
        }
   }
});

很高兴知道,太棒了!! - Krishna Sharma

0
jsonObjectCall.enqueue(new Callback<Object>() {
    @Override
    public void onResponse(Call<Object> call, Response<Object> response) {
       //when the response is successful

        if(response.isSuccessful()) {
            output = true;

            // display response as string 
            Log.i(TAG, "post submitted to API." + response.body().toString());

            //Object user1 = response.body(); maps response to the modal class


        }

    }

    @Override
    public void onFailure(Call<Object> call, Throwable t) {
        call.cancel();
    }
})

将你的回调函数修改为上述方式,并在注释中清楚说明用法。

希望这对你有所帮助。


这不是我想要的。 - Ulugbek Nuriddinov
当响应成功时,输出为true;在else情况和OnFailure内部,将output设置为false,并且你可以从函数的返回语句中返回它。这不是你想要的吗? - Kaveri
有一个错误:变量 'output' 是从内部类访问的,需要声明为 final。 - Ulugbek Nuriddinov
抱歉让你感到困惑。 - Kaveri
没关系,没事的 :) - Ulugbek Nuriddinov
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接