如何为所有Retrofit2调用设置默认的onResponse?

一月

因此,我正在使用Retrofit 2创建所有API调用。

这是我的项目中的一些示例代码。首先是Api。

public class Api {
public static final String BASE_URL = "http://www.api.com/";
public static final String kApiUserLogin = "user/login/";
public static final String kApiUserRegister = "user/register/";

private static ApiInterface sService;

public static ApiInterface client() {
    if (sService == null) {
        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
                .create();

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

        sService = retrofit.create(ApiInterface.class);
    }

    return sService;
}

public interface ApiInterface {
    @POST(kApiUserLogin)
    Call<UserResponse> loginUser(@Body UserDTO userDTO);

    @POST(kApiUserRegister)
    Call<UserResponse> registerUser(@Body UserDTO userDTO);

}}
}

然后这就是我的用法:

                    Call<UserResponse> call = Api.client().registerUser(user);
                    call.enqueue(new Callback<UserResponse>() {
                        @Override
                        public void onResponse(Response<UserResponse> response) {
                            UserResponse userResponse = response.body();
                            if (userResponse.getError() == null) {
                                UserDTO userDto = userResponse.getUser();
                                User.getInstance().setUserDTO(userDto);

                                Intent intent = new Intent(getActivity(), MainActivity.class);
                                startActivity(intent);
                            } else {
                                dialog
                                        .setTitleText("Error")
                                        .setContentText(userResponse.getError())
                                        .setConfirmText("OK")
                                        .changeAlertType(SweetAlertDialog.ERROR_TYPE);
                            }
                        }

                        @Override
                        public void onFailure(Throwable t) {
                            Log.d("CallBack", " Throwable is " + t);
                            dialog.hide();
                        }
                    });

                    Call<UserResponse> call = Api.client().loginUser(user);
                    call.enqueue(new Callback<UserResponse>() {
                        @Override
                        public void onResponse(Response<UserResponse> response) {
                            UserResponse userResponse = response.body();
                            if (userResponse.getError() == null) {
                                UserDTO userDto = userResponse.getUser();
                                User.getInstance().setUserDTO(userDto);

                                Intent intent = new Intent(getActivity(), MainActivity.class);
                                startActivity(intent);
                            } else {
                                dialog
                                        .setTitleText("Error")
                                        .setContentText(userResponse.getError())
                                        .setConfirmText("OK")
                                        .changeAlertType(SweetAlertDialog.ERROR_TYPE);
                            }
                        }

                        @Override
                        public void onFailure(Throwable t) {
                            Log.d("CallBack", " Throwable is " + t);
                            dialog.hide();
                        }
                    });
                }

现在的问题是,我如何才能做到这一点,以便可以elseif (userResponse.getError() == null)内部的部分重用一段代码onReponse没关系,这只是一个例子。整个应用程序中有许多api调用,所以这不像我只能在这2个方法下创建一个方法来调用。

我一直在寻找默认的onResponse处理程序或Api类中的类似内容??

同时,我onFailure当然想做同样的事情

也许我过于复杂了一些简单的事情……

厄兹古尔

如果我理解正确,那就足够了。

   Call<UserResponse> call = Api.client().registerUser(user);
    call.enqueue(new Callback<UserResponse>() {
        @Override
        public void onResponse(Response<UserResponse> response) {
            processResponse(response.body());
        }

        @Override
        public void onFailure(Throwable t) {
            Log.d("CallBack", " Throwable is " + t);
            dialog.hide();
        }
    });

    Call<UserResponse> call = Api.client().loginUser(user);
    call.enqueue(new Callback<UserResponse>() {
        @Override
        public void onResponse(Response<UserResponse> response) {
            processResponse(response.body());
        }

        @Override
        public void onFailure(Throwable t) {
            Log.d("CallBack", " Throwable is " + t);
            dialog.hide();
        }
    });
}

    private void processResponse(UserResponse userResponse) {
        if (userResponse.getError() == null) {
            UserDTO userDto = userResponse.getUser();
            User.getInstance().setUserDTO(userDto);

            Intent intent = new Intent(getActivity(), MainActivity.class);
            startActivity(intent);
        } else {
            dialog
                    .setTitleText("Error")
                    .setContentText(userResponse.getError())
                    .setConfirmText("OK")
                    .changeAlertType(SweetAlertDialog.ERROR_TYPE);
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Retrofit2中接收响应正文,但未调用onResponse

来自分类Dev

如何为Ionic 2中的所有请求设置默认的Http标头?

来自分类Dev

如何为Ionic 2中的所有请求设置默认的Http标头?

来自分类Dev

如何为JAVAFx中的所有按钮设置默认CSS

来自分类Dev

如何为JAVAFx中的所有按钮设置默认CSS

来自分类Dev

如何为所有SSH会话设置默认的DISPLAY?

来自分类Dev

Retrofit2 onResponse 方法可以有空响应吗?

来自分类Dev

如何通过Android上的retrofit2调用具有Cognito凭据的API网关?

来自分类Dev

如何为所有类型的单元格设置默认单元格设置?

来自分类Dev

如何在retrofit2中设置参数列表

来自分类Dev

如何为所有默认打开的窗口设置特定的窗口大小和位置

来自分类Dev

如何为目录中的所有文件夹/文件设置默认文件权限?

来自分类Dev

如何为所有默认打开的窗口设置特定的窗口大小和位置

来自分类Dev

如何为所有Qt5应用设置默认字体大小?

来自分类Dev

在i3wm中,如何为所有工作空间设置默认布局

来自分类Dev

如何为Ember Data中的所有数据类型设置默认值?

来自分类Dev

如何为所有本地主机项目设置默认读取权限?

来自分类Dev

如何为所有用户设置默认工作区位置?

来自分类Dev

Gedit 默认为 Python 使用 TAB:如何为所有 Ubuntu 用户更改此设置?

来自分类Dev

如何为所有测试设置存根?

来自分类Dev

如何为所有 ctypes 设置 focusArea

来自分类Dev

Angular JS:如何为通过$ http的所有调用设置上下文路径?

来自分类Dev

Gedit默认情况下对Python使用TAB:如何为所有Ubuntu用户更改此设置?

来自分类Dev

如何为所有用户编辑Windows 8.1“开始”屏幕(删除默认设置/添加非安装程序)

来自分类Dev

为什么 onResponse 方法不起作用?Retrofit2 库

来自分类Dev

Symfony:如何为所有路由配置默认选项?

来自分类Dev

如何使用 Retrofit2 @POST

来自分类Dev

如何为ng2-select设置默认值

来自分类Dev

如何为所有 uuid 调用一次 didRangeBeaconsInRegion

Related 相关文章

  1. 1

    在Retrofit2中接收响应正文,但未调用onResponse

  2. 2

    如何为Ionic 2中的所有请求设置默认的Http标头?

  3. 3

    如何为Ionic 2中的所有请求设置默认的Http标头?

  4. 4

    如何为JAVAFx中的所有按钮设置默认CSS

  5. 5

    如何为JAVAFx中的所有按钮设置默认CSS

  6. 6

    如何为所有SSH会话设置默认的DISPLAY?

  7. 7

    Retrofit2 onResponse 方法可以有空响应吗?

  8. 8

    如何通过Android上的retrofit2调用具有Cognito凭据的API网关?

  9. 9

    如何为所有类型的单元格设置默认单元格设置?

  10. 10

    如何在retrofit2中设置参数列表

  11. 11

    如何为所有默认打开的窗口设置特定的窗口大小和位置

  12. 12

    如何为目录中的所有文件夹/文件设置默认文件权限?

  13. 13

    如何为所有默认打开的窗口设置特定的窗口大小和位置

  14. 14

    如何为所有Qt5应用设置默认字体大小?

  15. 15

    在i3wm中,如何为所有工作空间设置默认布局

  16. 16

    如何为Ember Data中的所有数据类型设置默认值?

  17. 17

    如何为所有本地主机项目设置默认读取权限?

  18. 18

    如何为所有用户设置默认工作区位置?

  19. 19

    Gedit 默认为 Python 使用 TAB:如何为所有 Ubuntu 用户更改此设置?

  20. 20

    如何为所有测试设置存根?

  21. 21

    如何为所有 ctypes 设置 focusArea

  22. 22

    Angular JS:如何为通过$ http的所有调用设置上下文路径?

  23. 23

    Gedit默认情况下对Python使用TAB:如何为所有Ubuntu用户更改此设置?

  24. 24

    如何为所有用户编辑Windows 8.1“开始”屏幕(删除默认设置/添加非安装程序)

  25. 25

    为什么 onResponse 方法不起作用?Retrofit2 库

  26. 26

    Symfony:如何为所有路由配置默认选项?

  27. 27

    如何使用 Retrofit2 @POST

  28. 28

    如何为ng2-select设置默认值

  29. 29

    如何为所有 uuid 调用一次 didRangeBeaconsInRegion

热门标签

归档