首页 > 解决方案 > 方法总是返回空列表

问题描述

我在android开发中使用mvp设计模式,我正在使用retrofit2 ...当我运行该函数以从网络获取信息时,它获取信息但返回空列表

Response.Body 带有响应,这意味着代码有效

模型函数

    List<SearchDdb> searchResult;
    private Context context;
    public MainModel(Context context){this.context=context;}
    public List<SearchDdb> searchUser(String name) {
        final MainPresenter presenter = new MainPresenter(context);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Db db = retrofit.create(Db.class);
        Call<List<SearchDdb>> call = db.getUsers(name);
        call.enqueue(new Callback<List<SearchDdb>>() {
            @Override
            public void onResponse(Call<List<SearchDdb>> call, Response<List<SearchDdb>> response) {
                if(!response.isSuccessful()){
                    presenter.showDialog();
                }
               searchResult = response.body();
            }

            @Override
            public void onFailure(Call<List<SearchDdb>> call, Throwable t) {
            }
        });
        return searchResult;
    }

SearchDdb 文件

    private int id;
    private String name;
    private String grade;
    private String age;
    private String address;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getGrade() {
        return grade;
    }

    public String getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }
}

我如何调用函数 List<SearchDdb> ressult = presenter.searchUser("1");

标签: javaandroidlistretrofitretrofit2

解决方案


你不能这样称呼它,List<SearchDdb> ressult = presenter.searchUser("1");因为searchUser方法通过改造发出异步请求。这种方式searchUse返回 nullsearchResult因为响应尚未到来。

在您的视图模型类中定义 aLiveData并在您的活动/片段中观察它。当响应来自发布后的 api 时 onResponsesearchUser该响应是对实时数据的响应,并在您观察到的地方使用它。

如果你想看一个教程你可以看看这篇文章

这是另一个例子


推荐阅读