PullToRefreshListView加请求网络数据+imageloder

来源:互联网 发布:java泛型坑 编辑:程序博客网 时间:2024/05/29 03:18

//主方法

package com.example.day19_rikao;


import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


import com.example.day19_rikao.Bean.bean;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.ImageLoader;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {


    private PullToRefreshListView pullToRefreshListView;
    private StringBuilder builder;
    private List<bean.NewslistBean> list = new ArrayList<>();
    private Handler myHandler=new Handler();
    private MyAdapter adapter;
    int index=1;
    int type=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_lv);




        init();
        initLv();












    }
    class Mytask extends AsyncTask<String,Void,String>{


        @Override
        protected String doInBackground(String... strings) {
            try {
                //获取url
                URL url = new URL(strings[0]);
                //请求网络
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                int code = urlConnection.getResponseCode();
                //判断是否返回成功
                if(code==200){
                    //获取网络信息
                    InputStream inputStream = urlConnection.getInputStream();
                    BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream));
                    builder = new StringBuilder();
                    String s = "";
                    //拼接
                    while((s=bf.readLine())!=null){
                        builder.append(s);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }


            return builder.toString();
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            bean json = gson.fromJson(s, bean.class);
            List<bean.NewslistBean> list1 = json.getNewslist();
           //list.addAll(list1);






            if(type==1){
                list.addAll(0,list1);
            }else {
                list.addAll(list1);
            }








            setAdapter();
        }
    }


    public void setAdapter(){
        if(adapter==null){
            adapter=new MyAdapter();


            pullToRefreshListView.setAdapter(adapter);




        }else{
            adapter.notifyDataSetChanged();
        }


    }






    public  void  init(){
       Mytask mytask=new Mytask();
        mytask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1");








    }


    public void addtoTop(){
        type=1;
        index++;
        Mytask mytask=new Mytask();


        mytask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index);










    }


    public void addtoBottom(){
        type=2;
        index++;
        Mytask mytask=new Mytask();
        mytask.execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+index);




    }
    public void initLv(){
        //设置刷新模式 ,both代表支持上拉和下拉,pull_from_end代表上拉,pull_from_start代表下拉
        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);




/*这里通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别,第一个true 代表下来状态 ,第二个true 代表上拉的状态
如果想区分上拉和下拉状态的不同,可以分别设置*/


        ILoadingLayout startLabels = pullToRefreshListView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新");
        startLabels.setRefreshingLabel("正在拉");
        startLabels.setReleaseLabel("放开刷新");




        ILoadingLayout endLabels = pullToRefreshListView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");




/*如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。
  如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。
  当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法.


  加载数据完成后 必须 调用下 onRefreshComplete() 完成关闭 header,footer视图
*/
        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {//下拉刷新的回调
                //下拉刷新的数据,显示在listview列表的最上面
                addtoTop();
                myHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //刷新完成,必须在异步下完成
                        pullToRefreshListView.onRefreshComplete();
                        //刷新适配器




                    }
                },1000);
            }


            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {//上拉加载的回调
                //加载更多的数据,添加到集合列表的最后面
                addtoBottom();
                myHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //刷新完成,必须在异步下完成
                        pullToRefreshListView.onRefreshComplete();


                        //刷新适配器


                    }
                },1000);
            }
        });


    }




    class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return list.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 vh;
            if(convertView==null){
                vh=new Viewholder();
                convertView=View.inflate(MainActivity.this,R.layout.item,null);
                vh.img=(ImageView) convertView.findViewById(R.id.imageView);
                vh.tv=(TextView) convertView.findViewById(R.id.textView);
                convertView.setTag(vh);
            }else{
                vh= (Viewholder) convertView.getTag();
            }
            vh.tv.setText(list.get(position).getTitle());
            ImageLoader.getInstance().displayImage(list.get(position).getPicUrl(),vh.img);
            return convertView;
        }


    }
    public static class  Viewholder{
        ImageView img;
        TextView tv;
    }
}
//imageloder类
package com.example.day19_rikao;


import android.app.Application;


import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;


import java.io.File;


/**
 * author:Created by WangZhiQiang on 2017/10/19.
 */


public class Myapp  extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        File file = getExternalCacheDir();
        ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).memoryCacheExtraOptions(200, 200)//配置内存缓存图片的尺寸
                .memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小
                .threadPoolSize(3)//配置加载图片的线程数
                .threadPriority(1000)//配置线程的优先级
                .diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径
                .diskCacheFileCount(50)//配置sdcard缓存文件的数量
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//MD5这种方式生成缓存文件的名字
                .diskCacheSize(50 * 1024 * 1024)//在sdcard缓存50MB  .memoryCacheExtraOptions(200, 200)//配置内存缓存图片的尺寸
                .memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小
                .threadPoolSize(3)//配置加载图片的线程数
                .threadPriority(1000)//配置线程的优先级
                .diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径
                .diskCacheFileCount(50)//配置sdcard缓存文件的数量
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//MD5这种方式生成缓存文件的名字
                .diskCacheSize(50 * 1024 * 1024)//在sdcard缓存50MB
                .build();
        ImageLoader.getInstance().init(build);
    }
    }
//Bean类

package com.example.day19_rikao.Bean;


import java.util.List;


/**
 * author:Created by WangZhiQiang on 2017/10/19.
 */


public class bean {




    private int code;
    private String msg;
    private List<NewslistBean> newslist;




    public bean(int code, String msg, List<NewslistBean> newslist) {
        this.code = code;
        this.msg = msg;
        this.newslist = newslist;
    }


    public int getCode() {
        return code;
    }


    public void setCode(int code) {
        this.code = code;
    }


    public String getMsg() {
        return msg;
    }


    public void setMsg(String msg) {
        this.msg = msg;
    }


    public List<NewslistBean> getNewslist() {
        return newslist;
    }


    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }


    public static class NewslistBean {
        /**
         * ctime : 2017-10-19
         * title : 财新将全面收费 “财新通”问世
         * description : 健康点healthpoint
         * picUrl : https://t1.qpic.cn/mblogpic/34d9dfb75cfceb04a840/2000
         * url : https://mp.weixin.qq.com/s?src=16&ver=435&timestamp=1508371237&signature=UtWCCzY7cc41Os1d*zC5vmHTSC16K*ObDmVLSMPEGBGevaU7Iv7eS6lWazuYAmrmioKb2AjS70n6pAWLS1yVyP8GenoWkX3qSFotv90gnQY=
         */


        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;


        public String getCtime() {
            return ctime;
        }


        public void setCtime(String ctime) {
            this.ctime = ctime;
        }


        public String getTitle() {
            return title;
        }


        public void setTitle(String title) {
            this.title = title;
        }


        public String getDescription() {
            return description;
        }


        public void setDescription(String description) {
            this.description = description;
        }


        public String getPicUrl() {
            return picUrl;
        }


        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }


        public String getUrl() {
            return url;
        }


        public void setUrl(String url) {
            this.url = url;
        }
    }


}
//布局

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout tools:context="com.example.day19_rikao.MainActivity" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:ptr="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android">
<com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_lv" android:layout_height="match_parent" android:layout_width="match_parent" ptr:ptrHeaderTextColor="#FFFFFF" ptr:ptrHeaderBackground="#383838" ptr:ptrAnimationStyle="flip" ptr:ptrDrawable="@drawable/default_ptr_flip"/>
</RelativeLayout>

//item布局

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:orientation="horizontal" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/imageView" android:layout_height="100dp" android:layout_width="100dp" app:srcCompat="@mipmap/ic_launcher"/>
<TextView android:id="@+id/textView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="TextView"/>
</LinearLayout>

阅读全文
0 0
原创粉丝点击