佈局文件:
<?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); } }*/ }