方法总是 return 空列表
Method always return empty list
我在 android 开发中使用 mvp 设计模式,我正在使用 retrofit2 ......当我 运行 从网络获取信息的功能时,它获取信息但是returns 空列表
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
returns null searchResult
因为响应还没有来。
在您的视图模型 class 中定义一个 LiveData
并在您的 activity/fragment 中观察它。当响应来自 api 时
onResponse
in searchUser
post 对实时数据的响应并在您观察到的地方使用它。
如果你想看教程可以看this article。
这里是another example。
我在 android 开发中使用 mvp 设计模式,我正在使用 retrofit2 ......当我 运行 从网络获取信息的功能时,它获取信息但是returns 空列表
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
returns null searchResult
因为响应还没有来。
在您的视图模型 class 中定义一个 LiveData
并在您的 activity/fragment 中观察它。当响应来自 api 时
onResponse
in searchUser
post 对实时数据的响应并在您观察到的地方使用它。
如果你想看教程可以看this article。
这里是another example。