我正在从事mvvm设计,但OnResponse并未将数据保存在List中。返回空列表数组。我无法到达有价值的名单。我真的不知道错误的代码在哪里。这是代码。请帮助。
public class RetroClass {
private static final String BASE_URL="--";
private List<ProductModel> productList=new ArrayList<>();
public static Retrofit getRetroInstance(){
return new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();
}
public static APIService getAPIService(){
return getRetroInstance().create(APIService.class);
}
public List<ProductModel> getProducts(){
APIService apiService=getAPIService();
apiService.getProducts().enqueue(new Callback<List<ProductModel>>() {
@Override
public void onResponse(Call<List<ProductModel>> call, Response<List<ProductModel>> response) {
productList.addAll(response.body());
for (int k=0;k<productList.size();k++) {
Log.d("onResponse: ", productList.get(k).getOrderName());//im getting the value here
}
}
@Override
public void onFailure(Call<List<ProductModel>> call, Throwable t) {
Log.d("onFailure: ",t.getMessage());
}
});
return productList;//but this is empty
}
}
这是我的视图模型。
public class ProductsVievModal extends ViewModel {
List<ProductModel> productList;
LiveData<List<ProductModel>> liveproductList;
RetroClass apiClass=new RetroClass();
public List<ProductModel> getProducts(){
productList=apiClass.getProducts();
for (int k=0;k<productList.size();k++) {
Log.d("onResponse: ", productList.get(k).getOrderName());
}
return productList;
}
}
最佳答案
.enqueue正在异步发送请求,并将其响应通知回调。它是异步的。 onResponse()
必须先完成,然后才能返回产品列表。
我怀疑在return productList;
返回其值之前已执行。您可以通过在onResponse()
之前放置一个日志来检查哪个行首先执行吗?
关于android - Android Studio retrofit OnResponse问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58045928/