主页面
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import com.google.gson.Gson;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import zhanghaijiao.bawei.com.listmoretype_demo2.adapter.MyAdapter;
import zhanghaijiao.bawei.com.listmoretype_demo2.bean.ResultData;
public class MainActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.lv);
//1.异步获取数据
MyTask task=new MyTask();
task.execute("http://v.juhe.cn/toutiao/index?type=top&key=444da40ec8ee43818073d7131c2ffa8f");
}
class MyTask extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... strings) {
try {
URL url=new URL(strings[0]);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
if(connection.getResponseCode()==200){
InputStream inputStream = connection.getInputStream();
String s=streamToString(inputStream);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s!=null){
Gson gson=new Gson();
ResultData resultData = gson.fromJson(s, ResultData.class);
List<ResultData.ResultBean.DataBean> data = resultData.getResult().getData();
MyAdapter adapter=new MyAdapter(MainActivity.this,data);
listView.setAdapter(adapter);
}
}
}
public String streamToString(InputStream stream){
ByteArrayOutputStream outputStream=null;
try {
outputStream = new ByteArrayOutputStream();
byte[] bytes=new byte[1024];
int len;
while ((len=stream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}
return outputStream.toString();
}
}
MyApplication子类
import android.app.Application;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.File;
/**
* Created by jane on 2018/1/3.
* Application->Context 子类
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Log.d("zzz","App入口");
Toast.makeText(this,"app",Toast.LENGTH_SHORT).show();
//自定义sd卡缓存目录 1.android默认cache-app被卸载时,缓存的目录一并被删除 2.自定义
// File cachefile=getExternalCacheDir();
File cachefile= new File(Environment.getExternalStorageDirectory().getPath()+"/images");
//1.初使化--进行一下全局配置 Application
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(400, 700)//缓存图片最大的长和宽
.threadPoolSize(3)//线程池的数量
.threadPriority(4)
.memoryCacheSize(20*1024*1024)//设置内存缓存区大小
.diskCacheSize(80*1024*1024)//设置sd卡缓存区大小
.diskCache(new UnlimitedDiscCache(cachefile))//自定义sd卡缓存目录
.writeDebugLogs()//打印日志内容
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理
.build();
ImageLoader.getInstance().init(configuration);
}
}
bean包(略)
适配器
import android.content.Context;
import android.graphics.Bitmap;
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.util.List;
import zhanghaijiao.bawei.com.listmoretype_demo2.R;
import zhanghaijiao.bawei.com.listmoretype_demo2.bean.ResultData;
/**
* Created by jane on 2018/1/3.
*/
public class MyAdapter extends BaseAdapter {
private Context context;
private List<ResultData.ResultBean.DataBean> data;
private DisplayImageOptions options;
//定义三种类型
private final int ONE_IMAGE=0;
private final int TWO_IMAGE=1;
private final int THREE_IMAGE=2;
public MyAdapter(Context context, List<ResultData.ResultBean.DataBean> data) {
this.context = context;
this.data = data;
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)//使用内存缓存
.cacheOnDisk(true)//使用磁盘缓存
.showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
.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代表半径 自定义
.build();
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getItemViewType(int position) {
//根据展示的数据类型,来作判断
String pics = data.get(position).getThumbnail_pic_s();
String pic02 = data.get(position).getThumbnail_pic_s02();
String pic03 = data.get(position).getThumbnail_pic_s03();
if(pics!=null && pic02==null && pic03==null){
return ONE_IMAGE;
}else if(pics!=null && pic02!=null && pic03==null){
return TWO_IMAGE;
}else{
return THREE_IMAGE;
}
}
@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) {
//调用方法,得到第个条目对应的类型
int type = getItemViewType(i);
if(type==ONE_IMAGE){
Holder1 holder1;
if(view==null){
holder1=new Holder1();
view=View.inflate(context, R.layout.image_one,null);
holder1.imageView=view.findViewById(R.id.img);
holder1.textView=view.findViewById(R.id.tv);
view.setTag(holder1);
}else {
holder1= (Holder1) view.getTag();
}
holder1.textView.setText(data.get(i).getTitle());
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),holder1.imageView,options);
return view;
}else if(type==TWO_IMAGE){
Holder2 holder2;
if(view==null){
holder2=new Holder2();
view=View.inflate(context, R.layout.image_two,null);
holder2.imageView=view.findViewById(R.id.img1);
holder2.imageView1=view.findViewById(R.id.img2);
holder2.textView=view.findViewById(R.id.tv);
view.setTag(holder2);
}else {
holder2= (Holder2) view.getTag();
}
holder2.textView.setText(data.get(i).getTitle());
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),holder2.imageView,options);
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s02(),holder2.imageView1,options);
return view;
}else {
Holder3 holder3;
if(view==null){
holder3=new Holder3();
view=View.inflate(context, R.layout.image_three,null);
holder3.imageView=view.findViewById(R.id.img1);
holder3.imageView1=view.findViewById(R.id.img2);
holder3.imageView2=view.findViewById(R.id.img3);
holder3.textView=view.findViewById(R.id.tv);
view.setTag(holder3);
}else {
holder3= (Holder3) view.getTag();
}
holder3.textView.setText(data.get(i).getTitle());
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s(),holder3.imageView,options);
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s02(),holder3.imageView1,options);
ImageLoader.getInstance().displayImage(data.get(i).getThumbnail_pic_s03(),holder3.imageView2,options);
return view;
}
}
class Holder1{
ImageView imageView;
TextView textView;
}
class Holder2{
ImageView imageView;
ImageView imageView1;
TextView textView;
}
class Holder3{
ImageView imageView;
ImageView imageView1;
ImageView imageView2;
TextView textView;
}
}