2、数据缓存+listview分页加载+日夜间模式切换

来源:互联网 发布:js闪动文字 编辑:程序博客网 时间:2024/06/07 04:55
public class MainActivity extends AppCompatActivity {    private RadioButton radioButton;    private TextView textView;    private ListView listView;    private static final String TAG = "MainActivity";    private ListView lv;    private MyAdapter adapter;    private String urlPath = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";    private List<DataBean> list;    private int ye = 1;    //默认是日间模式    private int theme = R.style.AppTheme;    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case 1:                    Data bean = new Gson().fromJson(msg.obj.toString(), Data.class);                    list = new ArrayList<>();                    list.addAll(bean.getData());                    adapter = new MyAdapter(MainActivity.this, list);                    lv.setAdapter(adapter);                    break;                default:                    Data bean1 = new Gson().fromJson(msg.obj.toString(), Data.class);                    list.addAll(bean1.getData());                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (savedInstanceState != null) {            theme = savedInstanceState.getInt("theme");            setTheme(theme);        }        setContentView(R.layout.activity_main);        lv = (ListView) findViewById(R.id.listview);        load(ye);        //设置Listview的滑动监听        lv.setOnScrollListener(new AbsListView.OnScrollListener() {            @Override            public void onScrollStateChanged(AbsListView view, int scrollState) {                switch (scrollState) {                    //滚动结束                    case NumberPicker.OnScrollListener.SCROLL_STATE_IDLE:                        //滚动停止时,判断如果滚动到底部                        if (view.getLastVisiblePosition() == view.getCount() - 1) {                            // 使页数加1                            ye++;                            Toast.makeText(MainActivity.this, "" + ye, Toast.LENGTH_SHORT).show();                            load(ye);                            adapter.notifyDataSetChanged();                        } else if (view.getFirstVisiblePosition() == 0) {                            //滚动到顶部                            // 重新定义为第一页                            list.clear();                            ye = 1;                            Toast.makeText(MainActivity.this, "" + ye, Toast.LENGTH_SHORT).show();                            // 获得数据                            load(ye);                            // 刷新适配器                            adapter.notifyDataSetChanged();                        }                        break;                    //开始滚动                    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:                        break;                    //正在滚动                    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:                        break;                    default:                        break;                }            }            @Override            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {            }        });        if (savedInstanceState != null) {            theme = savedInstanceState.getInt("theme");            setTheme(theme);        }        radioButton = (RadioButton) findViewById(R.id.radio_daynight);        radioButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                theme = (theme == R.style.AppTheme) ? R.style.NightAppTheme : R.style.AppTheme;                MainActivity.this.recreate();            }        });    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putInt("theme", theme);    }    @Override    protected void onRestoreInstanceState(Bundle savedInstanceState) {        super.onRestoreInstanceState(savedInstanceState);        theme = savedInstanceState.getInt("theme");    }    private void load(final int ye) {        new Thread() {            @Override            public void run() {                String sb = Utils.getUrlConnect(urlPath + ye);                Message msg = Message.obtain();                msg.what = ye;                msg.obj = sb.toString();                mHandler.sendMessage(msg);            }        }.start();    }    class MyAdapter extends BaseAdapter {        private Context mContext;        private List<DataBean> mList;        public MyAdapter(Context context, List<DataBean> list) {            mContext = context;            mList = list;        }        @Override        public int getCount() {            return mList.size();        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return 0;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            if (convertView == null) {                convertView = View.inflate(mContext, R.layout.item, null);                holder = new ViewHolder();                holder.title = (TextView) convertView.findViewById(R.id.title);                holder.image = (ImageView) convertView.findViewById(R.id.image);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            holder.title.setText(mList.get(position).getNews_title());            Glide.with(mContext).load(mList.get(position).getPic_url()).into(holder.image);            return convertView;        }        class ViewHolder {            TextView title;            ImageView image;        }    }}
/** **httppast获取网络数据 **/ 
public class Utils {    public static String postUrlConnect(String urlPath, Map<String, Object> map) {        StringBuffer sbRequest = new StringBuffer();        if (map != null && map.size() > 0) {            for (String key : map.keySet()) {                sbRequest.append(key + "=" + map.get(key) + "&");            }        }        String request = sbRequest.substring(0, sbRequest.length() - 1);        try {            URL url = new URL(urlPath);            HttpURLConnection httpurl = (HttpURLConnection) url.openConnection();            httpurl.setRequestMethod("POST");            //设置连接主机超时            httpurl.setConnectTimeout(30000);            //设置从主机读取数据超时            httpurl.setReadTimeout(30000);            httpurl.setDoInput(true);            httpurl.setDoOutput(true);            //读取数据            OutputStream os = httpurl.getOutputStream();            os.write(request.getBytes());            //刷新            os.flush();            //判断返回值是否正确            if (httpurl.getResponseCode() == 200) {                InputStream in = httpurl.getInputStream();                StringBuffer sb = new StringBuffer();                //创建字符数组                byte[] buff = new byte[1024];                int len = -1;                while ((len = in.read(buff)) != -1) {                    sb.append(new String(buff, 0, len, "utf-8"));                }                //关闭流                in.close();                os.close();                httpurl.disconnect();                return sb.toString();            } else {                return null;            }        } catch (Exception e) {            e.printStackTrace();        }        return urlPath;    }    public static String getUrlConnect(String urlPath) {        try {            //获取地址            URL url = new URL(urlPath);            HttpURLConnection httpurl = (HttpURLConnection) url.openConnection();            httpurl.connect();            //判断返回值            if (httpurl.getResponseCode() == 200) {                InputStream in = httpurl.getInputStream();                StringBuffer sb = new StringBuffer();                byte[] buff = new byte[1024];                int len = -1;                while ((len = in.read(buff)) != -1) {                    sb.append(new String(buff, 0, len, "utf-8"));                }                in.close();                httpurl.disconnect();                return sb.toString();            } else {                return null;            }        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}






最后声明一下,配置的权限:网络、读取、写入、app本地
原创粉丝点击