仿知乎日报列表-加载网络数据

  1. SwipeRefreshLayout+ListView 实现了上拉加载下拉刷新
  2. AsyncHttpClient实现了数据的加载
  3. ImageLoader实现了图片的加载与本地缓存跟内存缓存
  4. SQLite实现了数据的本地缓存

demo下载地址

网络数据加载

   private static AsyncHttpClient client = new AsyncHttpClient();

    public static void get(String url,ResponseHandlerInterface responseHandlerInterface){
        client.get(Constant.BASEURL+url,responseHandlerInterface);
    }
 private void loadFirst() {
        isLoading = true;
                /**判断网络状态*/
        if (HttpUtils.isNetworkConnected(mActivity)){
                        /**获取的URL*/
            HttpUtils.get(Constant.LATESTNEWS, new TextHttpResponseHandler() {
                @Override
                public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
                }
                //成功
                @Override
                public void onSuccess(int i, Header[] headers, String s) {
                    /**写入SQLite中*/
                    SQLiteDatabase db = ((MainActivity)mActivity).getCacheDbHelper().getWritableDatabase();
                    db.execSQL("replace into CacheList(date,json) values (" + Constant.LATEST_COLUMN + ",'" + s + "')");
                    db.close();
                    parseLatestJson(s);
                }
            });
        }else {
            /**无网络连接时调用*/
            SQLiteDatabase db = ((MainActivity)mActivity).getCacheDbHelper().getReadableDatabase();
            Cursor cursor = db.rawQuery("select * from CacheList where date = " + Constant.LATEST_COLUMN, null);
            if (cursor.moveToFirst()){
                String json = cursor.getString(cursor.getColumnIndex("json"));
                parseLatestJson(json);
            }else {
         }
            cursor.close();
            db.close();
        }

    }

    private void parseLatestJson(String s) {
        Gson gson = new Gson();
        latest = gson.fromJson(s, Latest.class);
        date = latest.getDate();
        handler.post(new Runnable() {
            @Override
            public void run() {
                List<StoriesEntity> entities = latest.getStories();
                StoriesEntity entity = new StoriesEntity();
                entity.setType(Constant.TOPIC);
                entity.setTitle("今日热闻");
                entity.setTitle(convertDate(date));
                entities.add(0, entity);
                mAdapter.addList(entities);
                isLoading = false;
            }
        });
    }

下拉加载更多数据

从写了SwipeRefreshLayout的下拉方法

 public void setSwipeRefreshEnable(boolean enable) {
        sr.setEnabled(enable);
    }

监听Listview的滑动状态

        mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }

            /**
             * 滚动时调用
             * @param view 视图的滚动
             * @param firstVisibleItem 第一个索引
             * @param visibleItemCount  可见的Item数量
             * @param totalItemCount  适配的数量
             */
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (mListView != null && mListView.getChildCount() > 0) {
                    Boolean enable = (firstVisibleItem == 0) && (view.getChildAt(firstVisibleItem).getTop() == 0);
                    ((MainActivity) mActivity).setSwipeRefreshEnable(enable);
                    if (firstVisibleItem + visibleItemCount == totalItemCount && !isLoading) {
                        /**加载下拉数据*/
                        loadMore(Constant.BEFORE + date);
                    }
                }
            }
        });
/**加载数据*/
 private void loadMore(String url) {
        isLoading = true;
        if (HttpUtils.isNetworkConnected(mActivity)){
            HttpUtils.get(url, new TextHttpResponseHandler() {
                @Override
                public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
                }
                @Override
                public void onSuccess(int i, Header[] headers, String s) {
                    SQLiteDatabase db = ((MainActivity)mActivity).getCacheDbHelper().getWritableDatabase();
                    db.execSQL("replace into CacheList(date,json) values(" + date + ",' " + s + "')");
                    db.close();
                    parseBeforeJson(s);
                }
            });
        }else {
            SQLiteDatabase db = ((MainActivity)mActivity).getCacheDbHelper().getReadableDatabase();
            Cursor cursor = db.rawQuery("select * from CacheList where date = " + date, null);
            if (cursor.moveToFirst()){
                String json = cursor.getString(cursor.getColumnIndex("json"));
                parseBeforeJson(json);
            }else {
                cursor.close();
                db.close();
            }
        }
    }
    private void parseBeforeJson(String responseString) {
        Gson gson = new Gson();
        before = gson.fromJson(responseString, Before.class);
        if (before == null) {
            isLoading = false;
            return;
        }
        date = before.getDate();
        handler.post(new Runnable() {
            @Override
            public void run() {
                List<StoriesEntity> storiesEntities = before.getStories();
                StoriesEntity topic = new StoriesEntity();
                topic.setType(Constant.TOPIC);
                topic.setTitle(convertDate(date));
                storiesEntities.add(0, topic);
                mAdapter.addList(storiesEntities);
                isLoading = false;
            }
        });
    }

下拉刷新数据

    private void initView() {
        sr = (SwipeRefreshLayout) findViewById(R.id.sr);
        sr.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                replaceFragment();
                sr.setRefreshing(false);
            }
        });
    }

图片加载

 mImageloader = ImageLoader.getInstance();
        options = new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .build();
    @Override
    public View getView(int i, View convertView, ViewGroup parent) {
        ViewHolder viewHolder ;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.main_news_item, parent, false);
            viewHolder.tv_topic = (TextView) convertView.findViewById(R.id.tv_date);
            viewHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
            viewHolder.iv_title = (ImageView) convertView.findViewById(R.id.tv_img);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        StoriesEntity entity = entities.get(i);
        if (entity.getType() == Constant.TOPIC) {
            ((FrameLayout) viewHolder.tv_topic.getParent()).setBackgroundColor(Color.TRANSPARENT);
            viewHolder.tv_title.setVisibility(View.GONE);
            viewHolder.iv_title.setVisibility(View.GONE);
            viewHolder.tv_topic.setVisibility(View.VISIBLE);
            viewHolder.tv_topic.setText(entity.getTitle());
        } else {
            //样式设置
            ((FrameLayout) viewHolder.tv_topic.getParent()).setBackgroundResource(isLight ? R.drawable.item_background_selector_light : R.drawable.item_background_selector_dark);
            viewHolder.tv_topic.setVisibility(View.GONE);
            viewHolder.tv_title.setVisibility(View.VISIBLE);
            viewHolder.iv_title.setVisibility(View.VISIBLE);
            viewHolder.tv_title.setText(entity.getTitle());
            /**加载图片*/
            mImageloader.displayImage(entity.getImages().get(0), viewHolder.iv_title, options);
        }
        return convertView;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值