我在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
,并在活动/片段中对其进行观察。当响应来自apionResponse
中的searchUser
发布对实时数据的响应,并在您观察的地方使用它。
如果要查看教程,可以查看this article。
这是another example。