package com.example.a1019; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; 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.ILoadingLayout; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; public class MainActivity extends AppCompatActivity { private PullToRefreshListView pull_lv; private Handler handler = new Handler(); private String str = ""; private List<Result.NewslistBean> newslist; private MyAdapter myAdapter; private int pageIndex = 1; private DisplayImageOptions options; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pull_lv = (PullToRefreshListView) findViewById(R.id.pull_lv); //进行内存缓存 //进行sd卡缓存 /*.showImageOnLoading(R.drawable.ic_stub) // 设置正在下载中的图片 .showImageForEmptyUri(R.drawable.ic_empty) //没有请求地址时 .showImageOnFail(R.drawable.ic_error)//下载错误时*///设置图片质量 new MyAsync().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+pageIndex); options = new DisplayImageOptions.Builder() .cacheInMemory(true)//进行内存缓存 .cacheOnDisk(true)//进行sd卡缓存 /*.showImageOnLoading(R.drawable.ic_stub) // 设置正在下载中的图片 .showImageForEmptyUri(R.drawable.ic_empty) //没有请求地址时 .showImageOnFail(R.drawable.ic_error)//下载错误时*/ .bitmapConfig(Bitmap.Config.RGB_565)//设置图片质量 .build(); //设置监听 initLV(); } class MyAsync extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { //创建Url对象 try { URL url = new URL(params[0]); //打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //设置 connection.setRequestMethod("GET"); connection.setReadTimeout(3000); connection.setConnectTimeout(3000); int code = connection.getResponseCode(); if (code == 200) { InputStream inputStream = connection.getInputStream(); str = streamToString(inputStream); } } catch (Exception e) { e.printStackTrace(); } return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Log.e("ZZZ",s+"11111111111111111"); //解析数据 Gson gson = new Gson(); Result result = gson.fromJson(str, Result.class); newslist = result.getNewslist(); setAdapter(); } } public String streamToString(InputStream is) { StringBuilder sb = new StringBuilder(); String con; BufferedReader br = new BufferedReader(new InputStreamReader(is)); try { while ((con = br.readLine()) != null) { sb.append(con); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sb.toString(); } private void initLV() { //设置支持上拉下拉刷新 pull_lv.setMode(PullToRefreshBase.Mode.BOTH); //设置状态 ILoadingLayout startLabels = pull_lv.getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉刷新"); startLabels.setRefreshingLabel("正在拉"); startLabels.setReleaseLabel("放开刷新"); ILoadingLayout endLabels = pull_lv.getLoadingLayoutProxy(false, true); endLabels.setPullLabel("上拉刷新"); endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新..."); //设置监听事件 pull_lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { //下拉刷新的回调方法 //下拉刷新的数据,显示在listview列表的最上面 addtoTop(); // pageIndex=1; handler.postDelayed(new Runnable() { @Override public void run() { //刷新完成,必须在异步下完成 pull_lv.onRefreshComplete(); //刷新适配器 setAdapter(); } }, 1000); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { //上拉加载的回调 //加载更多的数据,添加到集合列表的最后面 addtoBottom(); pageIndex++; handler.postDelayed(new Runnable() { @Override public void run() { //刷新完成,必须在异步下完成 pull_lv.onRefreshComplete(); //刷新适配器 setAdapter(); } }, 1000); } }); } private void addtoBottom() { pageIndex++; new MyAsync().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+pageIndex); } private void addtoTop() { pageIndex=1; new MyAsync().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="+pageIndex); } private void setAdapter() { if (myAdapter == null) { myAdapter = new MyAdapter(); pull_lv.setAdapter(myAdapter); } else { myAdapter.notifyDataSetChanged(); } } class MyAdapter extends BaseAdapter { @Override public int getCount() { return newslist.size(); } @Override public Object getItem(int position) { return newslist.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(MainActivity.this, R.layout.item, null); ImageView img =(ImageView) view.findViewById(R.id.img); TextView tv = (TextView) view.findViewById(R.id.tv); ImageLoader.getInstance().displayImage(newslist.get(position).getPicUrl(),img,options); tv.setText(newslist.get(position).getTitle()); return view; } } }
//布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" xmlns:ptr="http://schemas.android.com/apk/res-auto" tools:context="com.example.a1019.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/pull_lv" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" ptr:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF" ></com.handmark.pulltorefresh.library.PullToRefreshListView>