【问题标题】:Retrofit 2 error response handlingRetrofit 2 错误响应处理
【发布时间】:2018-07-28 12:00:19
【问题描述】:

我有一个下载 api 数据的方法。但是我得到的是空数据的响应,所以我需要检查数据是否正确。

调用方法:

try {
        fetchChartData();
    } catch (EmptyResponseException e) {
        view.showError();
    }

并获取数据:

public void fetchChartData() throws EmptyResponseException {   
Call<ChartModel> dailyChartCall = ... //some call
dailyChartCall.enqueue(new Callback<ChartModel>() {
        @Override
        public void onResponse(Call<ChartModel> call, Response<ChartModel> response) {
            //EMPTY
            if(response.body().getData().size() == 0){
            <<-- THROW HERE
            } else ...

我应该如何实现异常并将其传递到顶部? 简单的“抛出新的 EmptyResponseException”不起作用,因为 onResponse 是匿名类。

【问题讨论】:

  • 为什么不使用 Toast、SnackBar 或其他警报消息而不是抛出异常?
  • 我发现异常并在活动中显示文本
  • 这个函数也是在2个activity中使用的,所以错误需要不同的处理方式
  • fetchChartData() 是否与您拥有try-catch 块的活动相同?

标签: android retrofit


【解决方案1】:

我假设您正在使用 MVP 结构设计您的应用程序。

因此,您可以这样做,而不是捕获异常

   public void fetchChartData(){   
        Call<ChartModel> dailyChartCall = ... //some call
        dailyChartCall.enqueue(new Callback<ChartModel>() {
        @Override
        public void onResponse(Call<ChartModel> call, Response<ChartModel> response) {
            //EMPTY
            if(response.body().getData().size() == 0){
               ***presenter.showError();***
            } else ...
            {
              >>>> do your logic here <<<< 
              presenter.showChartData();
            }

在presenter showError和showChartData中可以调用对应的view函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 2016-07-02
    • 2020-03-13
    • 2016-03-03
    • 2016-01-18
    • 2017-05-13
    • 2020-05-14
    • 2023-03-15
    相关资源
    最近更新 更多