//初始化DisplayImageOptions
static {
options = newDisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_error)
.showImageForEmptyUri(R.mipmap.ic_empty)
.showImageOnLoading(R.mipmap.loading)
.build();
}
private staticDisplayImageOptions options;
private XListViewxListView;
private List list;
//定义一个页码变量记录用户刷新到第几页了
private int pageIndex =1;
//定义一个变量去记录用户操作行为(例如:上拉、下拉)
private booleanflag;
private MyAdaptermyAdapter;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
xListView = (XListView)findViewById(R.id.xlist);
//设置是否可以上下拉加载
xListView.setPullLoadEnable(true);
//让主类去implements实现XListView.IXListViewListener
xListView.setXListViewListener(this);
//调用加载网络资源的方法
if(isOnline()){
//有网,联网请求数据
init();
}else {
//弹出提示对话框
showDialog();
}
}
//加载网络资源
public voidinit(){
try {
readNetContent("http://apis.juhe.cn/cook/query.php?key=e3c3dd5597dd875ff29c665a25b740251&pn="+pageIndex+"&rn=8&menu="+URLEncoder.encode("西红柿","utf-8")+"");
} catch (Exception e) {
e.printStackTrace();
}
}
//加载网络资源
public voidreadNetContent(String path){
new AsyncTask(){
@Override
protectedvoid onPostExecute(String s) {
if(s == null){
return;
}
Gson gson = new Gson();
BigMenu bigMenu =gson.fromJson(s, BigMenu.class);
list =bigMenu.getResult().getData();
//将数据绑定到适配上
if(myAdapter ==null){
myAdapter = new MyAdapter(list);
xListView.setAdapter(myAdapter);
}else {
myAdapter.loadMore(list,flag);
}
}
@Override
protectedString doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
if(connection.getResponseCode() == 200){
InputStream is = connection.getInputStream();
Stringresult = readStream(is);
returnresult;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(path);
}
//xlistview的适配器
class MyAdapter extendsBaseAdapter {
private final List bigList;
public MyAdapter(List list) {
this.bigList = list;
}
//定义一个方法不断获取新的资源 并把新的资源添加到原有的数据集合
//并判断是上拉 还是下拉 保证最新的资源在用户眼前
public void loadMore(List dataBeen, booleanflag){
for(BigMenu.ResultBean.DataBean da:dataBeen) {
if(flag == true){
bigList.add(0,da);
}else {
bigList.add(da);
}
}
//刷新适配器
notifyDataSetChanged();
}
@Override
public int getCount() {
returnbigList.size();
}
@Override
public Object getItem(int position) {
returnbigList.get(position);
}
@Override
public long getItemId(int position) {
returnposition;
}
@Override
public View getView(int position, ViewconvertView, ViewGroup parent) {
ViewHolderviewHolder;
//判断从converview不为空
if(convertView == null){
//装换布局
convertView =View.inflate(MainActivity.this,R.layout.item_main,null);
viewHolder = newViewHolder();
//找到控件
viewHolder.title = (TextView)convertView.findViewById(R.id.titleName);
viewHolder.pic = (ImageView)convertView.findViewById(R.id.pic);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
//为控件赋值
viewHolder.title.setText(bigList.get(position).getTitle());
ImageLoader.getInstance().displayImage(bigList.get(position).getSteps().get(0).getImg(),viewHolder.pic,options);
returnconvertView;
}
}
//viewholder类
class ViewHolder{
private TextView title;
private ImageView pic;
}
//装换字符流的方法
public StringreadStream(InputStream is){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
intlen;
byte[]bytes = new byte[1024];
while((len= is.read(bytes))>0){
baos.write(bytes,0,len);
}
returnbaos.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//下拉时会被执行的方法
@Override
public void onRefresh(){
pageIndex++;
flag=true;
//改变加载的页数再次获取资源
init();
//停止下拉刷新
xListView.stopRefresh(true);
}
//上拉时会被执行的方法
@Override
public void onLoadMore(){
pageIndex++;
flag=false;
//改变加载的页数再次获取资源
init();
//停止加载更多
xListView.stopLoadMore();
}
public booleanisOnline() {
//得到一个连接管理者
ConnectivityManager connMgr =(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//得到联网信息
NetworkInfo networkInfo =connMgr.getActiveNetworkInfo();
//判断设备是否联网
return (networkInfo != null &&networkInfo.isConnected());
}
private voidshowDialog(){
AlertDialog.Builder builder = newAlertDialog.Builder(this);
builder.setMessage("网络请求失败");
builder.setNegativeButton("取消",null);
builder.setPositiveButton("查看网络设置", newDialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
//跳转网络设置界面
startActivity(newIntent(Settings.ACTION_WIRELESS_SETTINGS));
}
});
builder.create().show();
}
重要权限:<</span>uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>