//mainactivity
private String path = "http://v.juhe.cn/toutiao/index?type=&key=edbcd842793dfde588f134a5bb3d6cab";
private ListView listView;
private HttpUtils httpUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源ID
listView = (ListView) findViewById(R.id.listview);
//得到实例
httpUtils = HttpUtils.getInstence();
//得到请求的数据 进行解析
httpUtils.getdata(path);
//接口回掉
httpUtils.setHttpListener(new HttpUtils.HttpListener() {
@Override
public void getjsondata(String json) {
//解析
Gson gson = new Gson();
SocietyBean societyBean = gson.fromJson(json, SocietyBean.class);
//List jihe
List<SocietyBean.ResultBean.DataBean> data = societyBean.getResult().getData();
Log.i("TAG",data.size()+"");
Myadapter myadapter = new Myadapter(data,MainActivity.this);
listView.setAdapter(myadapter);
}
});
}
}
//httputils
HttpUtils{
private HttpListener httpListener;
//饿汉式
private static HttpUtils httpUtils;
public static HttpUtils getInstence(){
if(httpUtils == null){
httpUtils = new HttpUtils();
}
return httpUtils;
}
//1.网络请求数据
public void getdata(String url){
MyAsyanc asyanc = new MyAsyanc();
asyanc.execute(url);
}
//2.异步请求
class MyAsyanc extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
String json = "";
try {
//3.
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
if(connection.getResponseCode() == 200){
InputStream inputStream = connection.getInputStream();
//转换
json = StreamToString(inputStream,"utf-8");
}
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.i("TAG",s);
//6.接口中的方法
httpListener.getjsondata(s);
}
}
//4.转换
private String StreamToString(InputStream inputStream, String s) {
StringBuilder builder =null;
try {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,s);
BufferedReader reader = new BufferedReader(inputStreamReader);
String string = null;
builder = new StringBuilder();
while ((string = reader.readLine())!=null){
builder.append(string);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return builder.toString();
}
//5.接口
public interface HttpListener{
void getjsondata(String json);
}
//向外提供当钱的接口
public void setHttpListener(HttpListener httpListener){
this.httpListener = httpListener;
};
}
//MyApplication
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
//初始化
initImageLoader();
}
private void initImageLoader() {
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 设置当前线程的优先级
.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(0) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
// .displayer(new RoundedBitmapDisplayer(300)) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(new Handler()) // default
.build();
return options;
}
}
//MyAdapter
public class Myadapter extends BaseAdapter{
private List<SocietyBean.ResultBean.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<SocietyBean.ResultBean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
//得到视图类型的总数
@Override
public int getViewTypeCount() {
return 3;
}
//条目视图的类型
@Override
public int getItemViewType(int position) {
//根据数据的字段来判断加载的条目样式
String thumbnail_pic_s = list.get(position).getThumbnail_pic_s();
String thumbnail_pic_s02 = list.get(position).getThumbnail_pic_s02();
String thumbnail_pic_s03 = list.get(position).getThumbnail_pic_s03();
//判断字段
if(thumbnail_pic_s != null && thumbnail_pic_s02 == null && thumbnail_pic_s03 ==null){
return ONE_ITEM;
}else if(thumbnail_pic_s != null && thumbnail_pic_s02 != null && thumbnail_pic_s03 ==null){
return TWO_ITEM;
}else if(thumbnail_pic_s != null && thumbnail_pic_s02 != null && thumbnail_pic_s03 !=null){
return THREE_ITEM;
}else{
return ONE_ITEM;
}
}
@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) {
//得到getItemViewType的返回值进行判断
int type = getItemViewType(position);
//第一张图片
if(type == ONE_ITEM){
OneViewHolder oneViewHolder;
if(convertView == null){
convertView = View.inflate(context, R.layout.item_one_image,null);
oneViewHolder = new OneViewHolder();
oneViewHolder.textView = convertView.findViewById(R.id.tv_title);
oneViewHolder.imageView = convertView.findViewById(R.id.img);
convertView.setTag(oneViewHolder);
}else{
oneViewHolder = (OneViewHolder) convertView.getTag();
}
oneViewHolder.textView.setText(list.get(position).getTitle());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),oneViewHolder.imageView, MyAppilaction.getOptions());
return convertView;
}else if(type == TWO_ITEM){
TwoViewHolder twoViewHolder;
if(convertView == null){
convertView = View.inflate(context,R.layout.item_two_image,null);
twoViewHolder = new TwoViewHolder();
twoViewHolder.textView = convertView.findViewById(R.id.tv_title);
twoViewHolder.imageView1 = convertView.findViewById(R.id.img);
twoViewHolder.imageView2 = convertView.findViewById(R.id.img1);
convertView.setTag(twoViewHolder);
}else{
twoViewHolder = (TwoViewHolder) convertView.getTag();
}
twoViewHolder.textView.setText(list.get(position).getTitle());
//获得第一张图片
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),twoViewHolder.imageView1,MyAppilaction.getOptions());
//获得第二张图片
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),twoViewHolder.imageView2,MyAppilaction.getOptions());
return convertView;
}else if(type == THREE_ITEM){
ThreeViewHolder threeViewHolder;
if(convertView == null){
convertView = View.inflate(context,R.layout.item_three_image,null);
threeViewHolder = new ThreeViewHolder();
threeViewHolder.textView = convertView.findViewById(R.id.tv_title);
threeViewHolder.imageView1 = convertView.findViewById(R.id.img);
threeViewHolder.imageView2 = convertView.findViewById(R.id.img1);
threeViewHolder.imageView3 = convertView.findViewById(R.id.img2);
convertView.setTag(threeViewHolder);
}else{
threeViewHolder = (ThreeViewHolder) convertView.getTag();
}
threeViewHolder.textView.setText(list.get(position).getTitle());
//第一张图片
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),threeViewHolder.imageView1,MyAppilaction.getOptions());
//第二张图片
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),threeViewHolder.imageView2,MyAppilaction.getOptions());
//第三张图片
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s03(),threeViewHolder.imageView3,MyAppilaction.getOptions());
return convertView;
}else{
return null;
}
}
class OneViewHolder{
TextView textView;
ImageView imageView;
}
class TwoViewHolder{
TextView textView;
ImageView imageView1,imageView2;
}
class ThreeViewHolder{
TextView textView;
ImageView imageView1,imageView2,imageView3;
}
}