PullToRefreshListView上拉加载,下拉刷新 刷新网络数据 简单实现ListView显示网络数据

来源:互联网 发布:php正则表达式邮箱注册 编辑:程序博客网 时间:2024/05/02 01:42

1、依赖:

compile 'com.google.code.gson:gson:2.6.2'compile 'com.github.userswlwork:pull-to-refresh:1.0.0'
2、权限:
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
3、主页面布局:
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.example.myapplication.MainActivity">   
<com.handmark.pulltorefresh.library.PullToRefreshListView    android:id="@+id/lv"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_gravity="start"    android:choiceMode="singleChoice"    android:dividerHeight="1px"    android:divider="#ff3660"    android:background="#33000000"    android:layout_alignParentTop="true" />
</android.support.constraint.ConstraintLayout>
4、item布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/iv"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv"/></LinearLayout>
5、封装News(接口中的数据)
6、网络请求类:NetWordUtils
  
package com.example.myapplication;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** *  2017-09-27. */public class NetWordUtils {    private static String  tag = "NetWordUtils";    /**     * 获取网络json     *     * @param urlString     * @return     */    public static String getNetjson(String urlString) {        try {            URL url = new URL(urlString);            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            urlConnection.setRequestMethod("GET");//若果是get请求可以不用配置; 其他请求必须配置            urlConnection.setConnectTimeout(8000);//设置链接超时间            InputStream inputStream = urlConnection.getInputStream();//获取网络返回的输入流;            //可拼接的字符串            StringBuilder stringBuilder = new StringBuilder();            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));            String temp = "";            while ((temp = bufferedReader.readLine()) != null) {                stringBuilder.append(temp);                temp = "";            }            //这个是网络获取的数据            String data = stringBuilder.toString();            Log.e(tag, "getData: " + data);            return data;        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return "";    }    /**     * 获取网络图片的工具类     */    public static Bitmap getNetBitmap(String urlString) {        try {            //用URL封装链接地址;            URL url = new URL(urlString);            //用url打开链接            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            //联网的状态码            int responseCode = urlConnection.getResponseCode();            if(responseCode ==200){                //链接上获取输入流                InputStream inputStream = urlConnection.getInputStream();                //把流直接转换成bitmap(系统提供的BitmapFactory)                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//BitmapFactory是个工具类,系统提供的                return bitmap;            }else {                Log.e(tag, "网络状态码:: "+responseCode );            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return null;    }}

7、MainActivity主页面代码:
package com.example.myapplication;import android.graphics.Bitmap;import android.os.AsyncTask;import android.os.Bundle;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.google.gson.Gson;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    
private PullToRefreshListView lv;    String urlTotal = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";    private MAdapter mAdapter;    private List<News.DataBean> list = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv= (PullToRefreshListView) findViewById(R.id.lv);        mAdapter = new MAdapter();        lv.setAdapter(mAdapter);        initData();        lv.setMode(PullToRefreshBase.Mode.BOTH);        lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {            @Override            public void onRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {                Toast.makeText(MainActivity.this, "下拉刷新", Toast.LENGTH_SHORT).show();                initData();                lv.postDelayed(new Runnable() {                    public void run() {                        //停止刷新                      lv.onRefreshComplete();
//  i = 0;
              //  new MyAsyncTask().execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=" + i);
                    }                },1000);            }        });        lv.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() {            @Override            public void onLastItemVisible() {
//  i = i + 20;
             //   new MyAsyncTask().execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=" + i);
                Toast.makeText(MainActivity.this, "上拉加载", Toast.LENGTH_SHORT).show();            }        });    }    private void initData() {        new MJsonAsyncTask().execute(urlTotal);    }    class MJsonAsyncTask extends AsyncTask<String, Void, String> {        public MJsonAsyncTask() {            super();        }        //主线程可以更新ui        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            News news = new Gson().fromJson(s, News.class);            List<News.DataBean> temp = news.getData();            list.addAll(temp);            mAdapter.notifyDataSetChanged();        }        //这个回调方法是子线程;        @Override        protected String doInBackground(String... strings) {            //取第0个元素,就是url;            String netjson = NetWordUtils.getNetjson(strings[0]);//调用网络请求工具类            return netjson;        }    }    class MAdapter extends BaseAdapter {        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int i) {            return list.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View containerView, ViewGroup viewGroup) {            View view = View.inflate(MainActivity.this, R.layout.item, null);            TextView tv_name = (TextView) view.findViewById(R.id.tv);            ImageView iv = (ImageView) view.findViewById(R.id.iv);            tv_name.setText(list.get(i).getNews_title());            /**             * getView方法每个条目显示的时候都会调用,所以我们在这个请求图片,并设置             *  把图片url传递给asyncTask             */            
ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),iv);
return view; } } }
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 档案在自己手里10年了怎么办 快递地址区域划分写错了怎么办 怀孕八个月肛门长个肉疙瘩怎么办呢 客户签了合同不要货了怎么办 不喂母乳宝宝只认识保姆了怎么办? 开创者比赛后没有买的鸽子怎么办 买回来小鸽子开家我敢了怎么办 小鸽子出壳后母鸽就不孵了怎么办 狗狗在笼子里一直叫怎么办 养了一年母鸽子不配对怎么办 血管翳云翳斑翳长满眼睛怎么办 鸽子训放50公里突然下雨了怎么办 安卓手机反应慢又卡怎么办 tcl安卓系统电视反应慢怎么办 狼人杀警长竞选一直平票怎么办 去驾校投诉教练被教练报复怎么办 哈尔滨机场大巴六点的飞机怎么办 山东德州恩城镇的农民怎么办养老险 我的世界联机平台房间进不去怎么办 验车时间过了3天怎么办 在携程订的机票和酒店不能退怎么办 千牛工作台中旺旺登录失败怎么办 掌通家园换手机号了忘了更改怎么办 qq注销了后绑定的全民k歌怎么办 小米账号绑定的手机号注销了怎么办 微信账号注销后绑定的手机号怎么办 微信账号不想用了注销不了怎么办 苹果手机掉了捡到不还怎么办 在工作中把和别人结下梁子了怎么办 在阿里巴巴上买的货物没发货怎么办 做了下颌角一边脸反复肿怎么办 玩广东11选5输50万怎么办 玩广东11选5输了十几万怎么办 新办公楼装修好就要搬进去怎么办 oppo手机上的黄页删了怎么办 小米不小心把手机联系人删了怎么办 58同城小区名输不了怎么办 e路发注册直接有积分怎么办 大众速腾的不锈钢圈被碰花了怎么办 公司卡着生育险不给怎么办 济南图书馆借书超过期限了怎么办