1.MainActivity
package com.example.lianxi_02; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.example.lianxi_02.adapter.MyAdapter; import com.example.lianxi_02.beans.Beans; import com.example.lianxi_02.utils.HttpUtils; import com.example.lianxi_02.view.XListView; import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private HttpUtils httpUtils; private String path = "https://www.apiopen.top/satinApi?type=&page="; private int page = 1; private int type = 41; private XListView xListView; private List<Beans.DataBean> list = new ArrayList<>(); private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //zujian initsetview(); // getdataFromNetWork(); } private void initsetview() { xListView = findViewById(R.id.xlistview); xListView.setPullLoadEnable(true); xListView.setPullRefreshEnable(true); xListView.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { page = 1; type = 41; getdataFromNetWork(); } @Override public void onLoadMore() { page++; type++; getdataFromNetWork(); } }); adapter = new MyAdapter(list,MainActivity.this); xListView.setAdapter(adapter); } public void getdataFromNetWork() { String url = path+type+page; httpUtils = HttpUtils.getInsetance(); httpUtils.getdata(url); httpUtils.setHttpListence(new HttpUtils.HttpListence() { @Override public void getjsondata(String json) { Gson gson = new Gson(); Beans beans = gson.fromJson(json, Beans.class); List<Beans.DataBean> list1 = beans.getData(); if (page == 1 && type ==41){ list.clear(); } list.addAll(list1); adapter.notifyDataSetChanged(); if (page == 1 && type == 41){ xListView.stopRefresh(); }else { xListView.stopLoadMore(); } } }); } }
2.到一个view文件
3.创建工具类
package com.example.lianxi_02.utils; import android.os.AsyncTask; 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; import java.net.URLConnection; public class HttpUtils { private static HttpUtils httpUtils; private HttpListence httpListence; public static HttpUtils getInsetance() { if (httpUtils == null){ httpUtils = new HttpUtils(); } return httpUtils; } public void getdata(String url){ MyAsyncTask myAsyncTask = new MyAsyncTask(); myAsyncTask.execute(url); } class MyAsyncTask extends AsyncTask<String,Void,String>{ String json = ""; @Override protected String doInBackground(String... params) { try { URL url = new URL(params[0]); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); if (urlConnection.getResponseCode() == 200){ InputStream inputStream = urlConnection.getInputStream(); json= StreamToString(inputStream); } } catch (Exception e) { e.printStackTrace(); } return json; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); httpListence.getjsondata(s); } } private String StreamToString(InputStream inputStream) throws IOException { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader reader = new BufferedReader(inputStreamReader); String s = null; StringBuilder builder = new StringBuilder(); while ((s = reader.readLine())!=null){ builder.append(s); } reader.close(); return builder.toString(); } public interface HttpListence { void getjsondata(String json); } public void setHttpListence(HttpListence httpListence) { this.httpListence = httpListence; } }
创建一个MyApp
package com.example.lianxi_02.utils; import android.app.Application; import android.content.Context; import android.graphics.Bitmap; import android.os.Handler; import com.example.lianxi_02.R; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer; import com.nostra13.universalimageloader.utils.StorageUtils; import java.io.File; public class MyApp extends Application{ private Context context ; @Override public void onCreate() { super.onCreate(); context = this; intImageLoader(); } private void intImageLoader() { File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽 .diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个 .threadPoolSize(3) // default 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .memoryCacheSizePercentage(13) // default .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .diskCacheFileCount(100) // 可以缓存的文件数量 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .writeDebugLogs() // 打印debug log .build(); //开始构建 ImageLoader.getInstance().init(config); } public static DisplayImageOptions getOptions(){ DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位 .delayBeforeLoading(1000) // 下载前的延迟时间 .cacheInMemory(true) // default 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中 .considerExifParams(false) // default .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型 .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20) .handler(new Handler()) // default .build(); return options; }; }
创建一个Bean
创建一个Mybase
package com.example.lianxi_02.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.lianxi_02.R; import com.example.lianxi_02.beans.Beans; import com.example.lianxi_02.utils.MyApp; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; public class MyAdapter extends BaseAdapter{ private List<Beans.DataBean> list; private Context context; private final int ONE_ITEM = 0; private final int TWO_ITEM = 1; private final int THREE_ITEM = 2; public MyAdapter(List<Beans.DataBean> list, Context context) { this.list = list; this.context = context; } @Override public int getItemViewType(int position) { String profile_image = list.get(position).getProfile_image(); String bimageuri = list.get(position).getBimageuri(); String image1 = list.get(position).getImage1(); if (profile_image !=null && bimageuri == null && image1 == null){ return ONE_ITEM; }else if (profile_image !=null && bimageuri != null && image1 == null){ return TWO_ITEM; }else if (profile_image !=null && bimageuri != null && image1 != null){ return THREE_ITEM; }else { return ONE_ITEM; } } @Override public int getViewTypeCount() { return 3; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { int itemViewType = getItemViewType(position); if (itemViewType == ONE_ITEM){ OneViewHolder oneViewHolder ; if (convertView==null){ oneViewHolder = new OneViewHolder(); convertView = View.inflate(context,R.layout.item01_listview,null); oneViewHolder.item01_profile_image = convertView.findViewById(R.id.item01_url); oneViewHolder.text01 = convertView.findViewById(R.id.title01); convertView.setTag(oneViewHolder); }else { oneViewHolder = (OneViewHolder) convertView.getTag(); } ImageLoader.getInstance().displayImage(list.get(position).getProfile_image(),oneViewHolder.item01_profile_image, MyApp.getOptions()); oneViewHolder.text01.setText(list.get(position).getText()); return convertView; }else if(itemViewType == TWO_ITEM){ TwoViewHolder twoViewHolder; if (convertView==null){ twoViewHolder = new TwoViewHolder(); convertView = View.inflate(context, R.layout.item02_listview,null); twoViewHolder.item02_profile_image = convertView.findViewById(R.id.item02_url); twoViewHolder.item02_bimageuri = convertView.findViewById(R.id.item02_img); twoViewHolder.text02 = convertView.findViewById(R.id.title02); convertView.setTag(twoViewHolder); }else { twoViewHolder = (TwoViewHolder) convertView.getTag(); } ImageLoader.getInstance().displayImage(list.get(position).getProfile_image(),twoViewHolder.item02_profile_image); ImageLoader.getInstance().displayImage(list.get(position).getBimageuri(),twoViewHolder.item02_bimageuri); twoViewHolder.text02.setText(list.get(position).getText()); return convertView; }else if (itemViewType == THREE_ITEM){ ThreeViewHolder threeViewHolder; if (convertView==null){ threeViewHolder = new ThreeViewHolder(); convertView = View.inflate(context, R.layout.item03_listview,null); threeViewHolder.item03_profile_image = convertView.findViewById(R.id.item03_url); threeViewHolder.item03_bimageuri = convertView.findViewById(R.id.item03_img); threeViewHolder.item03_image1 = convertView.findViewById(R.id.item03_userImg); threeViewHolder.text03 = convertView.findViewById(R.id.title03); convertView.setTag(threeViewHolder); }else { threeViewHolder = (ThreeViewHolder) convertView.getTag(); } ImageLoader.getInstance().displayImage(list.get(position).getProfile_image(),threeViewHolder.item03_profile_image, MyApp.getOptions()); ImageLoader.getInstance().displayImage(list.get(position).getBimageuri(),threeViewHolder.item03_bimageuri); ImageLoader.getInstance().displayImage(list.get(position).getImage1(),threeViewHolder.item03_image1, MyApp.getOptions()); threeViewHolder.text03.setText(list.get(position).getText()); return convertView; } return null; } class OneViewHolder{ ImageView item01_profile_image; TextView text01; } class TwoViewHolder{ ImageView item02_profile_image,item02_bimageuri; TextView text02; } class ThreeViewHolder{ ImageView item03_profile_image,item03_bimageuri,item03_image1; TextView text03; } }