Android之xListView网络请求上拉下拉加载
2017-04-21 19:38
260 查看
添加网络请求权限
导入一个依赖库 需要升级到自己当前Studio的版本
如何将类依赖到依赖库步骤:Project Struture–>在左边选中当前的工程–>点击Dependencies–>右上角红的的加号,选择Module dependency–>点击xListView(名称自定义)这个依赖库–>点击OK,完成。
一、主方法
导入一个依赖库 需要升级到自己当前Studio的版本
如何将类依赖到依赖库步骤:Project Struture–>在左边选中当前的工程–>点击Dependencies–>右上角红的的加号,选择Module dependency–>点击xListView(名称自定义)这个依赖库–>点击OK,完成。
一、主方法
public class MainActivity extends AppCompatActivity { private XListView xlistV; private int page = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xlistV = (XListView) findViewById(R.id.xlistV); //设置是否可以下拉刷新 // xlistV.setPullRefreshEnable(true); //是否可以上拉更多 xlistV.setPullLoadEnable(true); //刷新时间 xlistV.setRefreshTime("9:10:02"); initClint(); try { onCooks("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu=" + URLEncoder.encode("秘制红烧肉", "utf-8") + "&pn=" + page + "&rn=" + 10); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } //监听 private void initClint() { xlistV.setXListViewListener(new XListView.IXListViewListener() { //下拉刷新更多 @Override public void onRefresh() { //请求第二页的数据, 把最新的数据加载在前面 ++page; try { onCooks("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu=" + URLEncoder.encode("秘制红烧肉", "utf-8") + "&pn=" + page + "&rn=" + 10); //停止刷新 xlistV.stopRefresh(true); System.out.println("下拉啦"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } //上拉加载更多 @Override public void onLoadMore() { ++page; try { onCooks("http://apis.juhe.cn/cook/query?key=302e47cc56497312cb48ae3b46af632f&menu=" + URLEncoder.encode("秘制红烧肉", "utf-8") + "&pn=" + page + "&rn=" +10); xlistV.stopLoadMore(); System.out.println("上拉啦"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }); } public void onCooks(String path) { //异步操作 new AsyncTask<String, Void, String>() { private MyBaseAdapter adapter; private Bean bean; //UI更新 @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (s == null) { return; } //添加适配器 if (adapter == null){ //如果是第一次进就为空 adapter = new MyBaseAdapter(MainActivity.this, bean.getResult().getData()); }else{ //加载更多 adapter.addMore(bean.getResult().getData()); adapter.notifyDataSetChanged(); } xlistV.setAdapter(adapter); } //网络请求 @Override protected String doInBackground(String... params) { String path = params[0]; try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); int code = connection.getResponseCode(); if (code == 200) { InputStream input = connection.getInputStream(); String json = MyUtils.onStrem(input); //转换成对象 Gson gson = new Gson(); bean = gson.fromJson(json, Bean.class); } } catch (Exception e) { e.printStackTrace(); } return ""; } }.execute(path); } } //二、Utils类 流的转换 //流的转换 public class MyUtils { public static String onStrem (InputStream input){ try { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] by = new byte[1024]; int len = 0; while ((len = input.read(by)) != -1){ out.write(by,0,len); } return out.toString(); } catch (IOException e) { e.printStackTrace(); } return null; } } //三、Bean类 添加属性实现get set方法 四、BaseAdapter类 实现适配器 public class MyBaseAdapter extends BaseAdapter { private Context context; private List<Bean.ResultBean.DataBean> list; private viewHolder holder; private TextView ontv; public MyBaseAdapter (Context context, List<Bean.ResultBean.DataBean> list){ this.context = context; this.list = list; } //加载更多数据 public void addMore(List<Bean.ResultBean.DataBean> lists){ //foreach循环 for (Bean.ResultBean.DataBean data: lists) { //将最新的数据添加到适配器定义的集合中 list.add(0,data); } } @Override public int getCount() { return list != null ? list.size() : 0; } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null){ convertView = View.inflate(context, R.layout.list_load,null); holder = new viewHolder(); holder.ontv = (TextView) convertView.findViewById(R.id.ontv); convertView.setTag(holder); }else{ holder = (viewHolder) convertView.getTag(); } //重写信息 holder.ontv.setText(list.get(position).getTags()); return convertView; } class viewHolder { private TextView ontv; } }
相关文章推荐
- xListView(上拉刷新下拉加载,xml解析)中添加网络请求
- android--------volley之网络请求和图片加载
- Android MVP框架+RxJava+Retrofit+cecycleView,请求网络数据并加载
- Android 使用第三方加载网络请求的视频
- [置顶] XListView上拉刷新下拉加载(网络请求json)
- android get网络数据请求加载到listview(本人和新手版本)
- android-Picasso请求https加载网络图片不能显示的解决方案
- Android-SpinKit 加载进度条(登录,网络请求)
- Android 使用RxJava+Retrofit +Realm 组合加载数据 <读取缓存 显示 请求网络数据 缓存最新数据 更新界面>(二)
- Android 加载assets文件夹下带有css的html文件,无法显示网络请求的结果,原因是onReceiveSslError问题
- android网络加载图片设置背景并且把图片设置模糊,请求图片,
- 从零开始搞懂Android网络请求——异步加载ListView
- Android 网络:使用URLConnection提交请求,获取html代码加载WebView
- android界面之美---自定义网络请求进度加载对话框
- android--------volley之网络请求和图片加载
- RxAndroid和RxJava结合OkGo示例请求网络图片加载到不同ImageView
- Android 使用第三方加载网络请求的视频
- RxAndroid和RxJava结合OkGo示例请求网络图片加载到不同ImageView
- Android网络请求慢的时候,任意位置弹出加载中提示
- Android网络请求--动态加载的效果(已封装、可直接使用)