/** * 接入PullToRefresh * 1.引入Library * 2.依赖model * 3. 布局文件中使用可刷新的控件 * 4. 设置可刷新监听--> mPullRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() * 设置可以上拉 mPullRefreshListView.setMode(PullToRefreshBase.Mode.BOTH); */
<com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/plv" android:layout_width="match_parent" android:layout_height="match_parent"/>==================================================================
public class MainActivity extends AppCompatActivity { String baseUrl = "http://www.93.gov.cn/93app/data.do?channelId=0&startNum="; private ArrayList<String> list = new ArrayList(); private PullToRefreshListView plv; private int page = 0; private ArrayAdapter<String> mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); plv = (PullToRefreshListView) findViewById(R.id.plv); plv.setMode(PullToRefreshBase.Mode.BOTH);//BOTH 设置支持上下拉 getNetData(0); // 数据源 从网络请求数据 mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); plv.setAdapter(mAdapter); plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { /** * 下拉刷新 * @param pullToRefreshBase */ @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { list.clear(); getNetData(0); } /** * 上拉加载 * @param pullToRefreshBase */ @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { // 请求新数据, 添加到大集合 page++; getNetData(page); } }); } /** * 请求网络数据 * @param page */ private void getNetData( int page) { new MAsyncTask().execute(baseUrl+page); } class MAsyncTask extends AsyncTask<String,Void,String> { @Override protected String doInBackground(String... strings) { return NetWordUtils.getNetjson(strings[0]); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); Product product = gson.fromJson(s, Product.class); List<Product.DataBean> dataTemp = product.getData(); ArrayList<String> stringList = new ArrayList<>();//初始化一个空的字符串集合 for (int i = 0; i <dataTemp.size() ; i++) { stringList.add(dataTemp.get(i).getTITLE()); } list.addAll(stringList); mAdapter.notifyDataSetChanged(); plv.onRefreshComplete(); // 让刷新头和刷新底部返回 } }
}
NetUtil类:
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 ""; } /** * 获取网络图片的工具类 * * @param urlString * @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; } }Bean类自己用Json解析。