//初始化DisplayImageOptions
static {
options = new
DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_error)
.showImageForEmptyUri(R.mipmap.ic_empty)
.showImageOnLoading(R.mipmap.loading)
.build();
}
private static
DisplayImageOptions options;
private XListView
xListView;
private List list;
//定义一个页码变量记录用户刷新到第几页了
private int pageIndex =
1;
//定义一个变量去记录用户操作行为(例如:上拉、下拉)
private boolean
flag;
private MyAdapter
myAdapter;
@Override
protected void
onCreate(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 void
init(){
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 void
readNetContent(String path){
new AsyncTask(){
@Override
protected
void 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
protected
String 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();
String
result = readStream(is);
return
result;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(path);
}
//xlistview的适配器
class MyAdapter extends
BaseAdapter {
private final List bigList;
public MyAdapter(List list) {
this.bigList = list;
}
//定义一个方法不断获取新的资源
并把新的资源添加到原有的数据集合
//并判断是上拉 还是下拉
保证最新的资源在用户眼前
public void loadMore(List dataBeen, boolean
flag){
for
(BigMenu.ResultBean.DataBean da:dataBeen) {
if(flag == true){
bigList.add(0,da);
}else {
bigList.add(da);
}
}
//刷新适配器
notifyDataSetChanged();
}
@Override
public int getCount() {
return
bigList.size();
}
@Override
public Object getItem(int position) {
return
bigList.get(position);
}
@Override
public long getItemId(int position) {
return
position;
}
@Override
public View getView(int position, View
convertView, ViewGroup parent) {
ViewHolder
viewHolder;
//判断从converview不为空
if(convertView == null){
//装换布局
convertView =
View.inflate(MainActivity.this,R.layout.item_main,null);
viewHolder = new
ViewHolder();
//找到控件
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);
return
convertView;
}
}
//viewholder类
class ViewHolder{
private TextView title;
private ImageView pic;
}
//装换字符流的方法
public String
readStream(InputStream is){
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int
len;
byte[]
bytes = new byte[1024];
while((len
= is.read(bytes))>0){
baos.write(bytes,0,len);
}
return
baos.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 boolean
isOnline() {
//得到一个连接管理者
ConnectivityManager connMgr =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//得到联网信息
NetworkInfo networkInfo =
connMgr.getActiveNetworkInfo();
//判断设备是否联网
return (networkInfo != null &&
networkInfo.isConnected());
}
private void
showDialog(){
AlertDialog.Builder builder = new
AlertDialog.Builder(this);
builder.setMessage("网络请求失败");
builder.setNegativeButton("取消",null);
builder.setPositiveButton("查看网络设置", new
DialogInterface.OnClickListener() {
@Override
public
void onClick(DialogInterface dialog, int which) {
//跳转网络设置界面
startActivity(new
Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
});
builder.create().show();
}
重要权限:<</span>uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>