方法总是返回空列表

时间:2019-08-09 14:03:03

标签: java android list retrofit retrofit2

我正在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");

1 个答案:

答案 0 :(得分:1)

您不能像[0, 0, 0, 9, 0, 0, 10, 0, 0] 那样调用它,因为List<SearchDdb> ressult = presenter.searchUser("1");方法通过改型发出异步请求。这样searchUser会返回空searchUse,因为尚未响应。

在viewmodel类中定义searchResult,并在活动/片段中观察它。当响应来自api LiveData中的onResponse发布了对实时数据的响应,并在您观察的地方使用它。

如果要查看教程,可以查看this article

这里是another example