上拉与下拉加载判断是否联网

来源:互联网 发布:php高并发redis 编辑:程序博客网 时间:2024/06/14 00:57
//初始化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"/>
原创粉丝点击