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

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");

最佳答案

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

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

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

这是another example

08-25 01:54