//初始化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=e3c3dd5597dd875ff29c665a
25b740251&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"/>