打了log发现推荐页面和母婴界面都是有数据的,但是ui一直显示加载中,其他界面则正常显示
CategoryPagerPresenterImpl代码(逻辑层)
public class CategoryPagePresenterimpl implements ICategoryPagerPresenter {
private static final String TAG = "CategoryPagePresenterimpl";
private ICategoryPagerCallback mICategoryPagerCallback;
private Map<Integer,Integer> pageInfo = new HashMap<>();//需要一个集合来管理每个页面的数据
public static final int DEFAULT_PAGE=1;//默认是第一页
public CategoryPagePresenterimpl(){
}
private static ICategoryPagerPresenter sIntance=null;
public static ICategoryPagerPresenter getIntance(){
if (sIntance==null){//创建单例
sIntance=new CategoryPagePresenterimpl();
}
return sIntance;
}
@Override
public void getContentByCategoryId(int CategoryId) {
for (ICategoryPagerCallback callback : mCallbacks) {
if (callback.getCategoryId()==CategoryId) {
callback.onLoading(CategoryId);
}
}
//根据id来加载内容
Retrofit retrofit = RetrofitManager.getInstance().getRetrofit();
Api api = retrofit.create(Api.class);
Integer tagetPage = pageInfo.get(CategoryId);
if (tagetPage==null){
tagetPage=DEFAULT_PAGE;
pageInfo.put(CategoryId,tagetPage);
}
String homePagerUrl = UrlUtils.createHomePagerUrl(CategoryId, tagetPage);
Call<HomePagerContent> task = api.getHomePageContent(homePagerUrl);
task.enqueue(new Callback<HomePagerContent>() {
@Override
public void onResponse(Call<HomePagerContent> call, Response<HomePagerContent> response) {
int code = response.code();
Log.d(TAG,"CODE----"+code);
if (code== HttpURLConnection.HTTP_OK){
HomePagerContent pagerContent = response.body();
//把数据给到ui
handleHomePageContentRes(pagerContent,CategoryId);//进行更新UI的操作
}else {
//错误处理
handleNetWordError(CategoryId);
}
}
private void handleHomePageContentRes(HomePagerContent pagerContent, int categoryId) {
//通知UI层更新数据
List<HomePagerContent.DataDTO> data = pagerContent.getData();
for (ICategoryPagerCallback callback : mCallbacks) {
if (callback.getCategoryId()==categoryId) {
if (mCallbacks==null||mCallbacks.size()==0){
callback.onEmpty(categoryId);
}else {
List<HomePagerContent.DataDTO> looperData = data.subList(data.size() - 5, data.size());
callback.onLooperListLoaded(looperData,categoryId);
callback.onContentLoaded(data,categoryId);
}
}
}
}
@Override
public void onFailure(Call<HomePagerContent> call, Throwable t) {
Log.d(TAG,"onFailure"+t.toString());
}
});
}
private void handleNetWordError(int categoryId) {
for (ICategoryPagerCallback callback : mCallbacks) {
if (callback.getCategoryId()==categoryId) {
callback.onError(categoryId);
}
}
}
@Override
public void loaderMore(int CategoryId) {
}
@Override
public void reload(int CategoryId) {
}
private List<ICategoryPagerCallback> mCallbacks = new ArrayList<>();
@Override
public void registerViewCallback(ICategoryPagerCallback callback) {
if (!mCallbacks.contains(callback)) {
mCallbacks.add(callback);
}
}
@Override
public void unregisterViewCallback(ICategoryPagerCallback callback) {
mCallbacks.remove(callback);
}
}
HomeFragment代码
public class HomeFragment extends BaseFragment implements IHomeCallback {
@BindView(R.id.home_indicator)
public TabLayout mTabLayout;
private HomePresenterImpl mHomePresenter;
private CategoryPagePresenterimpl mCategoryPagePresenter;
@BindView(R.id.home_pager)
public ViewPager homepager;
private HomepagerAdapter mAdapter;
@Override
protected int getRootViewResId() {
return R.layout.fragment_home;
}
@Override
protected void initview(View view) {
mTabLayout.setupWithViewPager(homepager);
//给viewpager设置适配器
mAdapter = new HomepagerAdapter(getChildFragmentManager());
homepager.setAdapter(mAdapter);
}
@Override
protected void initPresenter() {
mHomePresenter = new HomePresenterImpl();
mHomePresenter.registerViewCallback(this);
}
@Override
protected View loadRootView(LayoutInflater inflater, ViewGroup container) {
//复写掉basefragment里面的loadrootview方法
return inflater.inflate(R.layout.base_home_fragment_layout, container, false);
}
@Override
protected void loadData() {
mHomePresenter.getCategories();//数据从哪回来?要注册接口
}
@Override
public void onNetWorkError() {
setUpState(State.ERROR);
}
@Override
public void onLoading() {
setUpState(State.LOADING);
}
@Override
public void onEmpty() {
setUpState(State.EMPTY);
}
@Override
protected void release() {
if (mHomePresenter != null) {
mHomePresenter.unregisterViewCallback(this);
}
}
@Override
protected void onRetryClick() {
//网络错误,点击了重试
//重新加载分类内容
if (mHomePresenter != null) {
mHomePresenter.getCategories();
}
}
@Override
public void onCategoriesLoaded(Categories category) {
setUpState(State.SUCCESS);
//加载的数据从这里回来
if (mAdapter != null) {
mAdapter.setCategories(category);
}
}
}
HomePageFragment代码
public class HomePageFragment extends BaseFragment implements ICategoryPagerCallback {
private static final String TAG = "HomePageFragment";
private ICategoryPagerPresenter mCategoryPagerPresenter;
private String mTitle;
private int mId;
private HomePageContentAdapter mHomePageContentAdapter;
private looperPagerAdapter mLooperPagerAdapter;
public static HomePageFragment newInstance(Categories.DataBean category){
Log.d(TAG,"homepagerfragment-----");
HomePageFragment homePageFragment = new HomePageFragment();
Bundle bundle = new Bundle();
bundle.putString(Constants.KEY_HOME_PAGER_TITLE,category.getTitle());
Log.d(TAG,"title---"+category.getTitle());
bundle.putInt(Constants.KEY_HOME_PAGER_MATERIAL_ID,category.getId());
homePageFragment.setArguments(bundle);//设置数据
return homePageFragment;
}
@BindView(R.id.home_pager_content_list)
public RecyclerView mContentList;
@BindView(R.id.looper_pager)
public ViewPager looperpager;
@Override
protected int getRootViewResId() {
return R.layout.fragment_homepager;
}
@Override
protected void initview(View view) {
//设置布局管理器
setUpState(State.SUCCESS);
mContentList.setLayoutManager(new LinearLayoutManager(getContext()));
mContentList.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
outRect.top=5;
outRect.bottom=5;
}
});
mHomePageContentAdapter = new HomePageContentAdapter();
//设置适配器
mContentList.setAdapter(mHomePageContentAdapter);
//创建轮播图适配器
mLooperPagerAdapter = new looperPagerAdapter();
looperpager.setAdapter(mLooperPagerAdapter);
}
@Override
protected void initPresenter() {
//不同的分类需要拿到不同的对象,所以需要创建单例来节省资源
mCategoryPagerPresenter = CategoryPagePresenterimpl.getIntance();
mCategoryPagerPresenter.registerViewCallback(this);//注册接口
}
@Override
public void onContentLoaded(List<HomePagerContent.DataDTO> contents,int categoryId) {
//TODO:更新UI
setUpState(State.SUCCESS);
mHomePageContentAdapter.setData(contents);
}
@Override
public void onLoading(int categoryId) {
setUpState(State.LOADING);
}
@Override
public void onError(int categoryId) {
setUpState(State.ERROR);
}
@Override
public void onEmpty(int categoryId) {
}
@Override
public int getCategoryId() {
return mId;
}
@Override
public void onLoaderMoreError(int categoryId) {
}
@Override
public void onLoaderMoreEmpty(int categoryId) {
}
@Override
public void onLoaderMoreSuccess(List<HomePagerContent.DataDTO> contents, int categoryId) {
}
@Override
public void onLooperListLoaded(List<HomePagerContent.DataDTO> contents, int categoryId) {
LogUtils.d(HomePageFragment.this,"looperlist----"+contents.size());
//在这里传入数据
mLooperPagerAdapter.setData(contents);
}
@Override
protected void loadData() {
Bundle arguments = getArguments();
Log.d(TAG,"arguments-----"+arguments);
if (arguments!=null){
mTitle = arguments.getString(Constants.KEY_HOME_PAGER_TITLE);
mId = arguments.getInt(Constants.KEY_HOME_PAGER_MATERIAL_ID);
Log.d(TAG,"TITLE-------"+mTitle);
}
//todo:加载数据(通过presenter去加载数据)
if (mCategoryPagerPresenter!=null){
Log.d(TAG,"load data----");
mCategoryPagerPresenter.getContentByCategoryId(mId);
}
}
@Override
protected void release() {
if (mCategoryPagerPresenter != null) {
mCategoryPagerPresenter.unregisterViewCallback(this);
}
}
}
这里你看有没有数据,有数据了,就要让那个加载中的加载控件不可见
你先找下,显示加载中的代码在哪里调用的,之后在数据返回后,让这个控件不可见
很奇怪,url打出来都是正确的,就是没数据
感觉是对应的id错乱的问题,加载推荐页面的时候同时返回了推荐和食品的id,加载食品界面的时候返回的是男装的title,但是ui又是正确的