依赖 image-loader gson 继承Appliaction
清单文件加 网络权限 App
//Main主函数
public class MainActivity extends AppCompatActivity {
private XListView xlist;
private MyBase adapter;
private int page=1;
private util ut=new util();
private String path2 = “http://www.zhaoapi.cn/quarter/getAd”;
private String path = “http://172.17.8.100/movieApi/movie/v1/findHotMovieList?count=%d&page=%d”;
private final int Load_count=10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlist=findViewById(R.id.xlist);
adapter=new MyBase(this);
xlist.setAdapter(adapter);
xlist.setPullLoadEnable(true);
xlist.setPullRefreshEnable(true);
xlist.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
page=1;
load();
}
@Override
public void onLoadMore() {
page++;
load();
}
});
load();
}
private void load() {
if (page==1){
loads();
loadbann();
}else {
loads();
}
}
private void loadbann() {
ut.setresult(path2,BanBean.class, new util.Callback<BanBean>() {
@Override
public void setsuccess(BanBean o) {
adapter.setMban(o.getData());
}
});
}
private void loads() {
ut.setresult(String.format(path,Load_count,page),NewBean.class, new util.Callback<NewBean>() {
@Override
public void setsuccess(NewBean o) {
if (page==1){
adapter.setMnew(o.getResult());
}else {
adapter.addNew(o.getResult());
}
xlist.stopLoadMore();
xlist.stopRefresh();
if (o.getResult().size()>Load_count){
xlist.setPullLoadEnable(false);
}
}
});
}
}
//Mybase
class MyBase extends BaseAdapter {
private List<BanBean.DataBean> mban;
private List<NewBean.ResultBean> mnew;
private Context context;
private final int Count=2;
private final int xnew=0;
private final int xban=1;
public MyBase(Context context){
this.context=context;
mban=new ArrayList<>();
mnew=new ArrayList<>();
}
public void setMban(List<BanBean.DataBean> ban){
mban.clear();
if (ban!=null){
mban.addAll(ban);
}
notifyDataSetChanged();
}
public void setMnew(List<NewBean.ResultBean> news){
mnew.clear();
if (news!=null){
mnew.addAll(news);
}
notifyDataSetChanged();
}
//追加
public void addNew(List<NewBean.ResultBean> news){
if (news!=null){
mnew.addAll(news);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return hassbann() ? mnew.size()+1 : mnew.size();
}
//判断是否有banner
public boolean hassbann(){
return mban.size()>0;
}
@Override
public int getViewTypeCount() {
return Count;
}
@Override
public int getItemViewType(int position) {
return position==0 & hassbann() ? xban : xnew;
}
@Override
public NewBean.ResultBean getItem(int position) {
return mnew.get(hassbann() ? position-1 :position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position)==xban){
BanViewHolder holder;
if (convertView==null){
convertView=View.inflate(context,R.layout.banitem,null);
holder=new BanViewHolder();
holder.pager=convertView.findViewById(R.id.viewpager);
convertView.setTag(holder);
}else{
holder= (BanViewHolder) convertView.getTag();
}
holder.getnew(context,mban);
}else {
NeViewHolder holder;
if (convertView==null){
convertView=View.inflate(context,R.layout.newitem,null);
holder=new NeViewHolder();
holder.image=convertView.findViewById(R.id.image);
holder.text=convertView.findViewById(R.id.text);
convertView.setTag(holder);
}else{
holder= (NeViewHolder) convertView.getTag();
}
holder.text.setText(getItem(position).getSummary());
DisplayImageOptions options=new DisplayImageOptions.Builder().build();
ImageLoader.getInstance().displayImage(getItem(position).getImageUrl(),holder.image,options);
}
return convertView;
}
class NeViewHolder{
TextView text;
ImageView image;
}
class BanViewHolder{
ViewPager pager;
private android.os.Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
pager.setCurrentItem(pager.getCurrentItem()+1);
handler.sendEmptyMessageDelayed(0,2000);
}
};
public void getnew(Context context, List<BanBean.DataBean> mban) {
handler.removeCallbacksAndMessages(null);
pager.setAdapter(new Bannadapter(mban,context));
pager.setCurrentItem(pager.getAdapter().getCount()/2);
handler.sendEmptyMessageDelayed(0,2000);
}
}
}
//banadapter
class Bannadapter extends PagerAdapter {
private List<BanBean.DataBean> mban;
private Context context;
public Bannadapter(List<BanBean.DataBean> mban, Context context) {
this.context=context;
this.mban=mban;
}
@Override
public int getCount() {
return 5000;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView=new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(imageView);
ImageLoader.getInstance().displayImage(mban.get(position % mban.size()).getIconNoHttps(),imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
//banbean
public class BanBean {
/**
* msg :
* code : 0
* data : [{"aid":1,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad1.png","productId":null,"title":"第十三界瑞丽模特大赛","type":0,"url":"http://m.mv14449315.icoc.bz/index.jsp"},{"aid":2,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad2.png","productId":null,"title":"文化艺术节","type":0,"url":"http://m.mv14449315.icoc.bz/index.jsp"},{"aid":3,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad3.png","productId":null,"title":"直播封面标准","type":0,"url":"http://m.mv14449315.icoc.bz/index.jsp"},{"aid":4,"createtime":"2017-12-26T21:49:44","icon":"https://www.zhaoapi.cn/images/quarter/ad4.png","productId":"1","title":"人气谁最高,金主谁最豪气","type":1,"url":""}]
*/
private List<DataBean> data;
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* aid : 1
* createtime : 2017-12-26T21:49:44
* icon : https://www.zhaoapi.cn/images/quarter/ad1.png
* productId : null
* title : 第十三界瑞丽模特大赛
* type : 0
* url : http://m.mv14449315.icoc.bz/index.jsp
*/
private String icon;
private String title;
private String url;
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getIconNoHttps() {
return icon.replace("https", "http");
}
}
}
//uill
package com.example.lyy02;
import android.os.AsyncTask;
import com.google.gson.Gson;
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 util {
public interface Callback<T>{
void setsuccess(T o);
}
public static void setresult(final String path, final Class clazz, final Callback callback){
new AsyncTask<String,Void,Object>(){
@Override
protected Object doInBackground(String... strings) {
return setresult(path,clazz);
}
@Override
protected void onPostExecute(Object o) {
callback.setsuccess(o);
}
}.execute();
}
public static T setresult(String path,Class clazz){
String json = setresult(path);
Gson gson=new Gson();
T t = (T) gson.fromJson(json, clazz);
return t;
}
public static String setresult(String path){
String result="";
try {
URL url=new URL(path);
HttpURLConnection http= (HttpURLConnection) url.openConnection();
int responseCode = http.getResponseCode();
if (responseCode==200){
result=Stirng2(http.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private static String Stirng2(InputStream inputStream) throws IOException {
InputStreamReader in=new InputStreamReader(inputStream);
BufferedReader br=new BufferedReader(in);
StringBuilder builder=new StringBuilder();
for (String t=br.readLine();t!=null;t=br.readLine()){
builder.append(t);
}
return builder.toString();
}
}
//app
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
DisplayImageOptions options=new DisplayImageOptions.Builder().build();
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCacheSizePercentage(10)
.diskCacheSize(50*1024*1024)
.defaultDisplayImageOptions(options)
.build();
ImageLoader.getInstance().init(configuration);
}
}