//MainActivity界面
package com.bwei.xlistview.activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.bwei.xlistview.R;
import com.bwei.xlistview.adapter.MyAdapter;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import cz.msebera.android.httpclient.Header;
import xlistview.bawei.com.xlistviewlibrary.XListView;
public class MainActivity extends AppCompatActivity {
// private String url = "http://www.yulin520.com/a2a/forum/allTypeList?sign=376C5BFC22179A1B8FF3A86D4588B29F&pageSize=10&ts=1877785007&forumType=0&page=1";
private int page=1;
private XListView xlv;
private JSONArray jsonArray = null;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
//停止下拉刷新
xlv.stopRefresh();
break;
case 1:
//停止上拉加载
xlv.stopLoadMore();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
xlv = (XListView) findViewById(R.id.xlv);
//设置下拉和上拉监听
xlv.setPullRefreshEnable(true);
xlv.setPullLoadEnable(true);
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
Toast.makeText(MainActivity.this, "下拉刷新", Toast.LENGTH_SHORT).show();
page=1;
getServerData();
handler.sendEmptyMessageDelayed(0,2000);
/* handler.postDelayed(new Runnable() {
@Override
public void run() {
xlv.stopRefresh();
}
},2000);*/
}
@Override
public void onLoadMore() {
Toast.makeText(MainActivity.this, "上拉加载", Toast.LENGTH_SHORT).show();
page++;
getServerData();
handler.sendEmptyMessageDelayed(1,2000);
}
});
//默认需要有一个
getServerData();
}
private void getServerData() {
String url = "http://www.yulin520.com/a2a/forum/allTypeList?sign=376C5BFC22179A1B8FF3A86D4588B29F&pageSize=10&ts=1877785007&forumType=0&page="+page;
//创建网络请求
AsyncHttpClient client = new AsyncHttpClient();
client.get(this, url, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseString) {
Log.i("xxx", responseString);
try {
JSONObject jsonObject = new JSONObject(responseString);
JSONArray datas = jsonObject.getJSONArray("data");
//page为1的时候创建集合
if (page==1){
jsonArray = new JSONArray();
}
//遍历累加
for (int i =0;i<datas.length();i++){
jsonArray.put(datas.get(i));
}
MyAdapter adapter = new MyAdapter(MainActivity.this, jsonArray);
xlv.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}
//Adapter界面
package com.bwei.xlistview.adapter;
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.bwei.xlistview.R;
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.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/7/12 17:40
*/
public class MyAdapter extends BaseAdapter {
Context context;
JSONArray datas;
public MyAdapter(Context context, JSONArray datas) {
this.context = context;
this.datas = datas;
}
@Override
public int getCount() {
return datas.length();
}
@Override
public Object getItem(int position) {
try {
return datas.get(position);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item, null);
holder = new ViewHolder();
holder.iv = (ImageView) convertView.findViewById(R.id.iv);
holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
try {
JSONObject jsonObject = datas.getJSONObject(position);
String title = jsonObject.getString("title");
String headImg = jsonObject.getString("headImg");
holder.tv_title.setText(title);
// DisplayImageOptions options = DisplayImageOptions.createSimple();
DisplayImageOptions options = new DisplayImageOptions.Builder()
// 设置图片在下载期间显示的图片
.showImageOnLoading(R.mipmap.ic_launcher)
// 设置图片Uri为空或是错误的时候显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher)
// 设置图片加载/解码过程中错误时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher)
// 设置下载的图片是否缓存在内存中
.cacheInMemory(true)
// 设置下载的图片是否缓存在SD卡中
.cacheOnDisc(true)
// 是否考虑JPEG图像EXIF参数(旋转,翻转)
.considerExifParams(true)
// 设置图片以如何的编码方式显示
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
// 设置图片的解码类型//
.bitmapConfig(Bitmap.Config.RGB_565)
// 设置图片的解码配置
// .decodingOptions(options)
// .delayBeforeLoading(int delayInMillis)//int
// delayInMillis为你设置的下载前的延迟时间
// 设置图片加入缓存前,对bitmap进行设置
// .preProcessor(BitmapProcessor preProcessor)
// 设置图片在下载前是否重置,复位
.resetViewBeforeLoading(true)
// 是否设置为圆角,弧度为多少
.displayer(new RoundedBitmapDisplayer(100))
// 是否图片加载好后渐入的动画时间
//.displayer(new FadeInBitmapDisplayer(100))
// 构建完成
.build();
//使用图片加载框架加载图片
ImageLoader.getInstance().displayImage(headImg, holder.iv,options);
} catch (JSONException e) {
e.printStackTrace();
}
return convertView;
}
private class ViewHolder {
ImageView iv;
TextView tv_title;
}
}
//MyApplication界面
package com.bwei.xlistview.app;
import android.app.Application;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
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.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
import java.io.File;
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/7/13 10:48
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//进行全局配置,并初始化
// ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
File diskCache = StorageUtils.getCacheDirectory(this);
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
// 设置内存图片的宽高
.memoryCacheExtraOptions(480, 800)
// default = device screen dimensions
// 缓存到磁盘中的图片宽高
.diskCacheExtraOptions(480, 800, null)
// .taskExecutor(null)
// .taskExecutorForCachedImages()
.threadPoolSize(3)
// default 线程优先级
.threadPriority(Thread.NORM_PRIORITY - 2)
// default
.tasksProcessingOrder(QueueProcessingType.FIFO)
// // default设置在内存中缓存图像的多种尺寸
//加载同一URL图片时,imageView从小变大时,从内存缓存中加载
.denyCacheImageMultipleSizesInMemory()
// 超过设定的缓存大小时,内存缓存的清除机制
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
// 内存的一个大小
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13)
// default 将图片信息缓存到该路径下
.diskCache(new UnlimitedDiscCache(diskCache))
// default 磁盘缓存的大小
.diskCacheSize(50 * 1024 * 1024)
// 磁盘缓存文件的个数
.diskCacheFileCount(100)
//磁盘缓存的文件名的命名方式//一般使用默认值 (获取文件名称的hashcode然后转换成字符串)或MD5 new Md5FileNameGenerator()源文件的名称同过md5加密后保存
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
// 设置默认的图片加载
.imageDownloader(
new BaseImageDownloader(getApplicationContext())) // default
// 使用默认的图片解析器
.imageDecoder(new BaseImageDecoder(true)) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs().build();
ImageLoader.getInstance().init(configuration);
}
}