首先添加权限和依赖:联网权限,Gosn依赖和ImageLoader依赖。上拉加载和下拉刷新需要XListView这个需要从github官网下载并封装一个Library然后添加到依赖里
上述弄好之后创建一个类继承APPlication
import android.app.Application; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
//创建一个类继承Application public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); //初始化ImageLoader框架:链式开发 ImageLoaderConfiguration configuration= new ImageLoaderConfiguration.Builder(this).build(); //给ImageLoader配置参数 ImageLoader.getInstance().init(configuration); } }
在MainActivity里实现XListView.(你自己封装的Library)它会重写两个方法分别是onRefresh()[下拉刷新方法]和onLoadMore()[上拉加载方法]
import android.graphics.Bitmap; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; 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 android.widget.Toast; import com.bwie.xlistviewlibrary.View.XListView; import com.example.think.myapplication.JAVABean.JAVABean; import com.example.think.myapplication.Utils.Utils; import com.google.gson.Gson; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{ private XListView xlv; String uriString="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1"; List<JAVABean.NewslistBean> list=new ArrayList<>(); private MyAdapter my; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到控件 xlv = (XListView)findViewById(R.id.lv); //调用网络判断 int netPyte = Utils.getNetPyte(this); if (netPyte==1) { Toast.makeText(MainActivity.this,"当前正在使用WiFi网络",Toast.LENGTH_LONG).show(); //添加适配器 my = new MyAdapter(); xlv.setAdapter(my); //调用异步加载方法 initAsy(); //让XListView有上拉加载的功能 xlv.setPullLoadEnable(true); //接口回掉要把实现类设置进去 xlv.setXListViewListener(this); }if (netPyte==0){ } } //异步加载方法 public void initAsy(){ new MyAsyncTask().execute(uriString); } //异步加载类 public class MyAsyncTask extends AsyncTask<String,Void,String>{ //子线程 @Override protected String doInBackground(String... strings) { String string = strings[0]; String str = Utils.NetJson(string); return str; } //主线程 @Override protected void onPostExecute(String s) { super.onPostExecute(s); //实例化Gson Gson gson = new Gson(); //把Josn文件封装成JAVA对象 JAVABean javaBean = gson.fromJson(s, JAVABean.class); //通过JAVA对象获取值 List<JAVABean.NewslistBean> newslist = javaBean.getNewslist(); //把一个集合添加到另一个集合中 list.addAll(newslist); //刷新ListView页面 my.notifyDataSetChanged(); // 让刷新头 或者刷新底部ui返回; stop(); } } //下拉刷新 @Override public void onRefresh() { //清除数据 //list.clear(); //调用异步加载方法 initAsy(); } //上拉加载 @Override public void onLoadMore() { //调用异步加载方法 initAsy(); }// 让刷新头 或者刷新底部ui返回;
public void stop(){ xlv.stopLoadMore();//停止上拉加载更多 xlv.stopRefresh();//停止刷新 xlv.setRefreshTime("刚刚"); } //适配器类 class MyAdapter extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } //返回视图 @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHadler vh=null; //优化 if (view == null) { //实例化ViewHadler vh=new ViewHadler(); //把布局文件转成View view = View.inflate(MainActivity.this, R.layout.activity, null); //找到控件 vh.tv=view.findViewById(R.id.tv); vh.im=view.findViewById(R.id.im); //把ViewHadler放到容器里 view.setTag(vh); }else { //从容器里取出 vh = (ViewHadler)view.getTag(); } //赋值 vh.tv.setText(list.get(i).getTitle()); //调用图片异步加载 new MyBitmap(vh.im).execute(list.get(i).getPicUrl()); return view; } }
//优化
public class ViewHadler{ TextView tv; ImageView im; } //图片异步加载类 private class MyBitmap extends AsyncTask<String,Void,String>{ ImageView im; public MyBitmap(ImageView im) { this.im=im; } //子线程 @Override protected String doInBackground(String... strings) { String string = strings[0]; return string; } //主线程 @Override protected void onPostExecute(String s) { super.onPostExecute(s); ImageLoader.getInstance().displayImage(s,im); } }}
下面的都是工具类:
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.ConnectivityManager; import android.net.NetworkInfo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Utils { //Json解析方法 public static String NetJson(String uriStrng){ try { //URL对象封装接口字符串 URL url=new URL(uriStrng); //用URL打开连接,返回HttpConnection HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //设置超时时间 urlConnection.setConnectTimeout(8000); //获取状态码 int responseCode = urlConnection.getResponseCode(); if (responseCode == 200) { //通过HttpURLConnection获取字节流 InputStream inputStream = urlConnection.getInputStream(); //把字节流转成缓冲字符流 BufferedReader br=new BufferedReader(new InputStreamReader(inputStream)); //获取StringBuilder StringBuilder sb=new StringBuilder(); //变量 String st=""; while ((st=br.readLine())!=null){ sb.append(st); } return sb.toString(); }else { } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } //图片解析方法 public static Bitmap NetBitmap(String uriString) { try { //通过URL对象封装接口字符串 URL url = new URL(uriString); //用URL打开链接 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //设置链接超时时间 urlConnection.setConnectTimeout(8000); //获取状态码 int responseCode = urlConnection.getResponseCode(); //判断状态码 if (responseCode == 200) { //通过HttpURLConnection获取字节流 InputStream inputStream = urlConnection.getInputStream(); //通过图片工具类加工图片 Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap;//返回图片 } else { } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } //判断是否有网络方法 public static int getNetPyte(Context context){ //变量 int mState=-1;//-1没有网络 //获取ConnectivityManager ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //获取网络连接的信息 NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); //判断是否有网络 if (activeNetworkInfo == null) { return mState; } //获取网络状态 int type = activeNetworkInfo.getType(); //判断是否是蜂窝网络 if (type == ConnectivityManager.TYPE_MOBILE) { mState=0; }else if (type == ConnectivityManager.TYPE_WIFI) {//判断是否是wifi网络 mState=1; } return mState; } }