Xlistview(异步、Imagerloader、POST)

本文介绍了一个使用XListView的示例应用,通过异步任务实现数据的网络请求及更新,展示了如何设置XListView的刷新和加载更多功能,并自定义了适配器来展示数据。
package com.example.day10_xlistview;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.gson.Gson;
import com.limxing.xlistview.view.XListView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private XListView xlv;
    private  boolean flag = false;
    int indax = 1;
    ImageLoader loader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //ImageLoader方法
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(MainActivity.this);
        ImageLoader.getInstance().init(configuration);



        xlv = (XListView) findViewById(R.id.xlv);
        //加载玩消失
        xlv.setPullLoadEnable(true);
        //Xlistviwe监听事件
        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                //下拉刷新
                flag = false;
                indax--;
                //第一条数据就加载5条
                if (indax == 1){
                    indax = 5;
                }
                //获取网络请求
                getdata("http://apis.juhe.cn/cook/query.php",indax+"",10+"");
                //加载完成关闭
                xlv.stopRefresh(true);

            }

            @Override
            public void onLoadMore() {
                //上啦加载
                flag = true;
                indax--;
                if (indax == 1){
                    indax =5;
                }
                getdata("http://apis.juhe.cn/cook/query.php",indax+"",10+"");
                xlv.stopLoadMore();

            }
        });


        //网络请求接口
        try {
            getdata("http://apis.juhe.cn/cook/query.php",indax+"",10+"");
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
    public  void  getdata(String data,String pn,String rn){
        //异步
        new AsyncTask<String,Void,String>(){
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                //Gson方法
                Gson gson = new Gson();
                //Bean数据对象
                Bean bean = gson.fromJson(s, Bean.class);
                List<Bean.ResultBean.DataBean.StepsBean> list = bean.getResult().getData().get(0).getSteps();
                //绑定适配器
                Youhua youhua = new Youhua(list);
                xlv.setAdapter(youhua);

            }

            @Override
            protected String doInBackground(String... strings) {
                try {
                String url = strings[0];
                String pn = strings[1];
                String rn = strings[2];
                    //    HttpURL方法
                HttpURLConnection connection= (HttpURLConnection) new URL(url).openConnection();
                    //POST请求
                    connection.setRequestMethod("POST");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);
                    OutputStream os = connection.getOutputStream();
                    //网络请求key
                    os.write(("key=81921c6270f37eeec75be4081bd61e91&menu="
                            +URLEncoder.encode("秘制红烧肉","utf-8")+"&pn="+pn+"&rn"+rn).getBytes());
                    os.flush();

                    int code = connection.getResponseCode();
                    if (code==200){
                        InputStream is = connection.getInputStream();
                        String shuju = Jiexi.shuju(is);
                        //返回数据
                        System.out.println("=================="+shuju);
                        return shuju;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute(data,pn,rn);
    }
    //适配器
    class Youhua extends BaseAdapter{
        //list内部类
        List<Bean.ResultBean.DataBean.StepsBean> list;

        public Youhua(List<Bean.ResultBean.DataBean.StepsBean> list) {
            this.list = list;
            loader = ImageLoader.getInstance();
        }

        @Override
        public int getCount() {
            if (list !=null){
                return list.size();
            }
            return 0;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int postion, View contentview, ViewGroup viewGroup) {
            if (contentview == null){
                contentview = View.inflate(MainActivity.this,R.layout.youhua,null);
            }
            ImageView im =(ImageView) contentview.findViewById(R.id.im);
            TextView tv = (TextView) contentview.findViewById(R.id.tv1);
            tv.setText(list.get(postion).getStep());
            loader.displayImage(list.get(postion).getImg(),im);

            return contentview;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值