自定义类,继承Application,加载缓冲
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
File file = new File(Environment.getExternalStorageDirectory().getPath()+"Images0718");
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(80, 80)
.memoryCacheSize(2 * 1024 * 1024)
.threadPoolSize(3)
.threadPriority(1000)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 * 1024)
.diskCache(new UnlimitedDiskCache(file))
.build();
ImageLoader.getInstance().init(build);
}
}
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {
private XListView xlistview;
private int index = 1;
private boolean boo = false;
private MyBaseAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlistview = (XListView) findViewById(R.id.xlistview);
xlistview.setPullLoadEnable(true);
xlistview.setXListViewListener(this);
getData("http://apis.juhe.cn/cook/query.php", "26ef57b6568ddb188773d1c683879566", index +
"", 5 + "", "鱼香肉丝");
}
private void getData(String path, String key, String pn, String rn, String name) {
new AsyncTask<String, Void, String>() {
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (s != null) {
Gson gson = new Gson();
MenuInfo info = gson.fromJson(s, MenuInfo.class);//MenuInfo是自定义JAVABean
List<MenuInfo.ResultBean.DataBean> list = info.getResult().getData();
if (adapter == null) {
adapter = new MyBaseAdapter(list);
xlistview.setAdapter(adapter);
} else {
adapter.addData(list, boo);
adapter.notifyDataSetChanged();
}
}
}
@Override
protected String doInBackground(String... params) {
try {
String path = params[0];
String key = params[1];
String pn = params[2];
String rn = params[3];
String name = params[4];
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
OutputStream os = connection.getOutputStream();
os.write(("menu=" + name + "&key=" + key + "&pn=" + pn + "&rn=" + rn).getBytes());
os.flush();
os.close();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream is = connection.getInputStream();
return StringTools.getJson(is);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(path, key, pn, rn, name);
}
// 下拉刷新
@Override
public void onRefresh() {
++index;
getData("http://apis.juhe.cn/cook/query.php", "26ef57b6568ddb188773d1c683879566", index +
"", 5 + "", "鱼香肉丝");
boo = true;
xlistview.stopRefresh(true);
}
// 上啦加载
@Override
public void onLoadMore() {
++index;
getData("http://apis.juhe.cn/cook/query.php", "26ef57b6568ddb188773d1c683879566", index +
"", 5 + "", "鱼香肉丝");
boo = false;
xlistview.stopLoadMore();
}
// 自定义适配器
class MyBaseAdapter extends BaseAdapter {
private List<MenuInfo.ResultBean.DataBean> list;
public MyBaseAdapter(List<MenuInfo.ResultBean.DataBean> list) {
this.list = list;
}
// 自定义方法增加数据,true的时候从0下标开始增加,否则默认从listview的最后面加载数据
public void addData(List<MenuInfo.ResultBean.DataBean> data, boolean b) {
for (MenuInfo.ResultBean.DataBean bean : data) {
if (b)
list.add(0, bean);
else
list.add(bean);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder0 holder0 = null;
ViewHolder1 holder1 = null;
// 得到布局类型
int type = getItemViewType(position);
// 设置布局
switch (type) {
case 0:
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.item0, null);
holder0 = new ViewHolder0();
holder0.img = (ImageView) convertView.findViewById(R.id.img);
holder0.tv = (TextView) convertView.findViewById(R.id.textview);
convertView.setTag(holder0);
} else {
holder0 = (ViewHolder0) convertView.getTag();
}
break;
case 1:
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.item1, null);
holder1 = new ViewHolder1();
holder1.img = (ImageView) convertView.findViewById(R.id.img);
holder1.tv = (TextView) convertView.findViewById(R.id.textview);
convertView.setTag(holder1);
} else {
holder1 = (ViewHolder1) convertView.getTag();
}
break;
}
// 给每一个布局设置数据
switch (type) {
case 0:
holder0.tv.setText(list.get(position).getIngredients());
DisplayImageOptions build = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.displayer(new CircleBitmapDisplayer())//设置显示的图片成圆形
.build();
ImageLoader.getInstance().displayImage(list.get(position).getAlbums().get(0),
holder0.img, build);
break;
case 1:
holder1.tv.setText(list.get(position).getIngredients());
DisplayImageOptions build1 = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.displayer(new CircleBitmapDisplayer())//设置显示的图片成圆形
.build();
ImageLoader.getInstance().displayImage(list.get(position).getAlbums().get(0),
holder1.img, build1);
break;
}
return convertView;
}
// 设置每一个item的布局
@Override
public int getItemViewType(int position) {
if (position % 2 == 0)
return 0;
else
return 1;
}
// 这是布局类型的总数
//这是return 2的话,下标就是0,1;
@Override
public int getViewTypeCount() {
return 2;
}
}
class ViewHolder0 {
ImageView img;
TextView tv;
}
class ViewHolder1 {
ImageView img;
TextView tv;
}
}