布局文件:
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:ptr="http://schemas.android.com/apk/res-auto" android:id="@+id/dl"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/lv" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" ptr:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF"> </com.handmark.pulltorefresh.library.PullToRefreshListView> </RelativeLayout> <LinearLayout android:layout_width="200dp" android:layout_height="match_parent" android:orientation="vertical" android:background="#f00" android:layout_gravity="start" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/img"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" /> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:entries="@array/list"> </ListView> </LinearLayout> </android.support.v4.widget.DrawerLayout>
MainActivity:
package com.example.com.lianxiyuekaoti; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import com.example.com.lianxiyuekaoti.Adapter.Myadapter; import com.example.com.lianxiyuekaoti.Bean.ReqBean; import com.example.com.lianxiyuekaoti.Util.MyTask; import com.example.com.lianxiyuekaoti.Util.NetStateUtil; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.ILoadingLayout; 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 Myadapter myadapter; private List<ReqBean.DataBean>list=new ArrayList<>(); private int pageIndex=1; private int num=0; private PullToRefreshListView lv; private int type; private String urldata="http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+num; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = findViewById(R.id.lv); intoptlv(); getlData(); } public void getlData() { if(NetStateUtil.isConn(this)){ MyTask myTask = new MyTask(new MyTask.Icallbacks() { @Override public void updateUiByjson(String jsonstr) { Gson gson = new Gson(); ReqBean reqBean = gson.fromJson(jsonstr, ReqBean.class); //List<ReqBean.DataBean> data = reqBean.getData(); /* Myadapter myadapter = new Myadapter(MainActivity.this, data); lv.setAdapter(myadapter);*/ if(type==1){ list.clear(); } list.addAll(reqBean.getData()); setplvAdp(); } }); myTask.execute(urldata); lv.onRefreshComplete(); }else { NetStateUtil.showNoNetWorkDlg(this); } } private void setplvAdp() { if(myadapter==null){ myadapter = new Myadapter(this,list); lv.setAdapter(myadapter); }else{ myadapter.notifyDataSetChanged(); } } private void intoptlv() { //设置模式 lv.setMode(PullToRefreshBase.Mode.BOTH); /* //设置头尾布局显示的文字 ILoadingLayout startLabels = lv.getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉刷新");//第一次下拉时显示的文字 startLabels.setRefreshingLabel("正在拉");//下拉的过程中显示的文字 startLabels.setReleaseLabel("放开刷新");//不能在下拉时,显示的文字 ILoadingLayout endLabels = lv.getLoadingLayoutProxy(false, true); //endLabels.setPullLabel("上拉刷新"); endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新...");*/ lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { //下拉刷新 type =1; num=0; urldata="http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+num; getlData(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { //上拉加载 type=2; num +=20; urldata="http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+num; getlData(); } }); } }
//接口工具类:Mytask
package com.example.com.shangxialashuxin; import android.os.AsyncTask; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * 使用AsyncTask+HttpURLConnection请求数据 * Created by e531 on 2017/10/12. */ public class MyTask extends AsyncTask<String,Void,String> { //申请一个接口类对象 private Icallbacks icallbacks; //将无参构造设置成私有的,使之在外部不能够调用 private MyTask(){} //定义有参构造方法 public MyTask(Icallbacks icallbacks) { this.icallbacks = icallbacks; } @Override protected String doInBackground(String... params) { String str=""; try { //使用HttpUrlConnection URL url=new URL(params[0]); HttpURLConnection connection=(HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); if(connection.getResponseCode()==200){ InputStream inputStream=connection.getInputStream(); //调用工具类中的静态方法 str=StreamToString.streamToStr(inputStream,"utf-8"); } } catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析,封装到bean,更新ui组件 icallbacks.updateUiByjson(s); } //定义一个接口 public interface Icallbacks{ /** * 根据回传的json字符串,解析并更新页面组件 * @param jsonstr */ void updateUiByjson(String jsonstr); } }
statemstring工具类中:
package com.example.com.shangxialashuxin; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; /** * Created by e531 on 2017/10/12. */ public class StreamToString { public static String streamToStr(InputStream inputStream,String chartSet){ StringBuilder builder=new StringBuilder(); try { BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,chartSet)); String con; while ((con=br.readLine())!=null){ builder.append(con); } br.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } }
注:导入netutils包,还有适配器都一样:
适配器:
package com.example.com.shangxialashuxin; import android.content.Context; import android.graphics.Bitmap; import android.os.AsyncTask; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.List; /** * Created by 联想 on 2018/1/12. */ public class MyAdapter extends BaseAdapter { Context context; List<ReqBean.ResultBean.DataBean> data ; private final DisplayImageOptions options; public MyAdapter(Context context, List<ReqBean.ResultBean.DataBean> data) { this.context = context; this.data = data; options = new DisplayImageOptions.Builder() .cacheInMemory(true)//浣跨敤鍐呭瓨缂撳瓨 .cacheOnDisk(true)//浣跨敤纾佺洏缂撳瓨 .showImageOnLoading(R.mipmap.ic_launcher)//璁剧疆姝e湪涓嬭浇鐨勫浘鐗? .showImageForEmptyUri(R.mipmap.ic_launcher)//url涓虹┖鎴栬姹傜殑璧勬簮涓嶅瓨鍦ㄦ椂 .showImageOnFail(R.mipmap.ic_launcher)//涓嬭浇澶辫触鏃舵樉绀虹殑鍥剧墖 .bitmapConfig(Bitmap.Config.RGB_565)//璁剧疆鍥剧墖鑹插僵妯″紡 1px=2瀛楄妭 .imageScaleType(ImageScaleType.EXACTLY)//璁剧疆鍥剧墖鐨勭缉鏀炬ā寮? .displayer(new RoundedBitmapDisplayer(100))//璁剧疆鍦嗚 30浠h〃鍗婂緞 鑷畾涔? .build(); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int i) { return data.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view==null){ view=View.inflate(context, R.layout.connectionfriview,null); holder=new ViewHolder(); holder.tv=view.findViewById(R.id.tv); holder.img=view.findViewById(R.id.img); view.setTag(holder); }else{ holder= (ViewHolder) view.getTag(); } holder.tv.setText(data.get(i).getTitle()); // ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),holder.img,options); /* mytask mytask = new mytask(holder.img); mytask.execute()*/ return view; } private class ViewHolder{ TextView tv; ImageView img; } /* class mytask extends AsyncTask<String,Void,String>{ private ImageView img; *//* public mytask(ImageView img) { this.img=img; } @Override protected String doInBackground(String... strings) { try { URL url = new URL(strings[0]); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); } }*/ }