com.sinelead.car.club.NewsFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.sinelead.car.club.NewsFragment.java

Source

/*
*
*   (C) 2014 xiao70 <196245957@qq.com>
*   
*
*   GNU
*   GNU
*   GNU
*   <http://www.gnu.org/licenses/>.
*    
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 3 of the License, or
*   (at your option) any later version.
*      
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*   GNU General Public License for more details.
*      
*   You should have received a copy of the GNU General Public License
*   along with this program; if not, write to the Free Software
*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
*   MA 02110-1301, USA.
*/

package com.sinelead.car.club;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.GZIPInputStream;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.ByteArrayBuffer;
import org.json.JSONArray;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import cn.trinea.android.common.entity.HttpResponse;
import cn.trinea.android.common.service.HttpCache;
import cn.trinea.android.common.service.HttpCache.HttpCacheListener;
import cn.trinea.android.common.util.ToastUtils;
import cn.trinea.android.common.view.DropDownListView;
import cn.trinea.android.common.view.DropDownListView.OnDropDownListener;
import cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager;

import com.sinelead.car.club.ui.adapter.ImagePagerAdapter;
import com.sinelead.car.club.ui.adapter.NewsListAdapter;
import com.viewpagerindicator.CirclePageIndicator;

public class NewsFragment extends Fragment {
    AutoScrollViewPager viewPager;
    private DropDownListView listView;
    private Context context;
    // private LinkedList<String> listItems;
    private CirclePageIndicator indicator;

    protected Elements bannerList;
    private ImagePagerAdapter imagePagerAdapter;

    private NewsListAdapter articleAdapter;
    public static final int MORE_DATA_MAX_COUNT = 100;
    public int moreDataCount = 1;
    private TextView bannerText;
    private View bannerView;
    public String currentImageUrl = "";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        View v = inflater.inflate(R.layout.tab_item_fragment_news, null);
        context = v.getContext();

        listView = (DropDownListView) v.findViewById(R.id.list_view);
        // banner
        bannerView = inflater.inflate(R.layout.viewpage_banner_news, null);
        listView.addHeaderView(bannerView);

        initImages();
        initListView();

        // 
        new GetDataTask(true).execute();

        return v;
    }

    private void initListView() {

        // set drop down listener
        listView.setOnDropDownListener(new OnDropDownListener() {

            @Override
            public void onDropDown() {
                new GetDataTask(true).execute();
            }
        });

        // set on bottom listener
        listView.setOnBottomListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                new GetDataTask(false).execute();
            }
        });
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ToastUtils.show(context, R.string.drop_down_tip);
                String newsUrl = articleAdapter.getArticleUrl((int) id);
                // activity,url
                Intent intent = new Intent();

                intent.putExtra("url", newsUrl);
                /* intent */
                intent.setClass(context, XinchepingActivity.class);
                /* Activity */
                context.startActivity(intent);
            }
        });
        // listView.setShowFooterWhenNoMore(true);
        articleAdapter = new NewsListAdapter(context, R.layout.listview_item_card);

        listView.setAdapter(articleAdapter);

        // listView.setSelector(new ColorDrawable(Color.LTGRAY));
    }

    private void initImages() {
        viewPager = (AutoScrollViewPager) bannerView.findViewById(R.id.view_pager);
        // 
        DisplayMetrics dm = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);

        viewPager.setLayoutParams(new LayoutParams(dm.widthPixels, (int) (dm.widthPixels / 1.68)));

        bannerText = (TextView) bannerView.findViewById(R.id.text_banner);

        imagePagerAdapter = new ImagePagerAdapter(context, bannerList).setInfiniteLoop(false);
        viewPager.setAdapter(imagePagerAdapter);

        viewPager.setInterval(6000); // 6
        viewPager.startAutoScroll();
        viewPager.setCurrentItem(0);
        // viewPager.setSlideBorderMode(AutoScrollViewPager.SLIDE_BORDER_MODE_TO_PARENT);
        indicator = (CirclePageIndicator) bannerView.findViewById(R.id.indicator);
        indicator.setViewPager(viewPager);
        indicator.setOnPageChangeListener(new ImageOnPageChangeListener());

        viewPager.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ToastUtils.show(context, R.string.drop_down_tip);

                // activity,url
                Intent intent = new Intent();
                intent.putExtra("url", currentImageUrl);
                /* intent */
                intent.setClass(context, XinchepingActivity.class);
                /* Activity */
                context.startActivity(intent);
            }

        });

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        viewPager.stopAutoScroll();
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        viewPager.startAutoScroll();
    }

    public class ImageOnPageChangeListener implements OnPageChangeListener {

        @Override
        public void onPageSelected(int position) {
            if (bannerList != null) {
                Element href = bannerList.get(position);
                String text = href.text();
                bannerText.setText(text);
                currentImageUrl = href.attr("href");
            }
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    }

    private class GetDataTask extends AsyncTask<Void, Void, String[]> {

        private boolean isDropDown;

        public GetDataTask(boolean isDropDown) {
            this.isDropDown = isDropDown;
        }

        @Override
        protected String[] doInBackground(Void... params) {
            try {
                if (isDropDown) {
                    parseNewsUrl();
                    parseArticleList(1);
                } else {
                    moreDataCount++;
                    parseArticleList(moreDataCount);
                }
            } catch (Exception e) {
                ;
            }
            String[] mStrings = null;
            return mStrings;
        }

        @Override
        protected void onPostExecute(String[] result) {

            if (isDropDown) {

                articleAdapter.notifyDataSetChanged();

                // should call onDropDownComplete function of DropDownListView
                // at end of drop down complete.
                SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");
                listView.onDropDownComplete(getString(R.string.update_at) + dateFormat.format(new Date()));
            } else {

                articleAdapter.notifyDataSetChanged();

                if (moreDataCount >= MORE_DATA_MAX_COUNT) {
                    listView.setHasMore(false);
                }

                // should call onBottomComplete function of DropDownListView at
                // end of on bottom complete.
                listView.onBottomComplete();
            }

            super.onPostExecute(result);
        }
    }

    public void parseNewsUrl() {
        HttpCache httpCache = new HttpCache(context);
        httpCache.httpGet("http://m.xincheping.com/", new HttpCacheListener() {

            protected void onPreGet() {
                // do something like show progressBar before httpGet, runs on
                // the UI thread
            }

            protected void onPostGet(HttpResponse httpResponse, boolean isInCache) {
                // do something like show data after httpGet, runs on the UI
                // thread
                if (httpResponse != null) {
                    // get data success
                    String html = httpResponse.getResponseBody();
                    Document doc = Jsoup.parse(html);
                    Elements uls = doc.select("ul.slides"); // classul

                    bannerList = uls.first().getElementsByTag("a");

                    if (imagePagerAdapter != null) {
                        imagePagerAdapter.setBannerList(bannerList);
                        imagePagerAdapter.notifyDataSetChanged();
                    }

                } else {
                    // get data fail
                }
            }
        });
        return;
    }

    public void parseArticleList(int pageIndex) {
        try {
            String URL = "http://m.xincheping.com/index.php?a=Index.ajaxGetIndexList";

            HttpPost request = new HttpPost(URL);

            // request.setParams(getRequest.getParams());

            request.addHeader("Referer", "http://m.xincheping.com/");

            request.addHeader("Origin", "http://m.xincheping.com");
            request.addHeader("X-Requested-With", "XMLHttpRequest");
            request.addHeader("Content-Type", "application/x-www-form-urlencoded");
            request.addHeader("Accept", "application/json");
            request.addHeader("User-Agent",
                    "Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I8552 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30");

            request.addHeader("Accept-Encoding", "gzip,deflate");
            request.addHeader("Accept-Language", "zh-CN, en-US");
            request.addHeader("Accept-Charset", "utf-8, iso-8859-1, utf-16, *;q=0.7");
            String page = "page=1";
            page = page.replace("1", String.valueOf(pageIndex));
            StringEntity entity = new StringEntity(page);

            request.setEntity(entity);
            // 
            DefaultHttpClient postClient = new DefaultHttpClient();
            org.apache.http.HttpResponse httpResponse = postClient.execute(request);
            //  JSON 
            // HttpEntity entity = httpResponse.getEntity();
            String retSrc = getZipString(httpResponse);
            //  JSON 
            JSONArray jsonArray = new JSONArray(retSrc);
            articleAdapter.addArticleList(jsonArray);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public String getZipString(org.apache.http.HttpResponse response) {

        String resultString = "";
        ByteArrayBuffer bt = new ByteArrayBuffer(4096);
        try {
            // Get
            HttpEntity he = response.getEntity();
            // 
            GZIPInputStream gis = new GZIPInputStream(he.getContent());
            int l;
            byte[] tmp = new byte[4096];
            while ((l = gis.read(tmp)) != -1) {
                bt.append(tmp, 0, l);
            }

            resultString = new String(bt.toByteArray(), "utf-8");
            // UTF-8

        } catch (Exception e) {
            Log.i("ERR", e.toString()); // 
        }

        return resultString;
    }
}