AsyncTask异步加载+原生解析


//--------------------------------------------解析、添加到集合、展示------------------------------
public class Tab_fragment_hu extends BaseFragment {

    private int num=1;  //默认第一页
    //接口
    private String path = "http://mnews.gw.com.cn/wap/data/news/news/mobile/jbgg/page_"+num+".json";   
    private PullToRefreshListView plistview;
    private Handler handler = new Handler();
    private MyAdapter myAdapter;
    private JSONArray newdata;

    @Override
    protected int ResultId() { 
    //布局页面
        return R.layout.fragment_hu;
    }

    @Override
    protected void initView(View view) {
    //初始化控件
        plistview = view.findViewById(R.id.plistview);
    }

    @Override
    protected void initData() {

        //解析数据方法
        getData(1);
        //刷新方法
        getShua();
        plistview.setMode(PullToRefreshListView.Mode.BOTH);  //同时支持上拉加载和下拉刷新
    }

	//下拉加载
    private void getShua() {
        plistview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
            //handler加载
               handler.postDelayed(new Runnable() {
                   @Override
                   public void run() {
                       num = 1;   //第一页数据

                       getData(1);   //刷新完默认展示第一页数据
                       plistview.onRefreshComplete();   //停止刷新
                   }
               },3000);
               myAdapter.notifyDataSetInvalidated();   //刷新适配器

            }

    //上拉加载
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        num++;  //页面数据累加
                        getData(num);   //展示所有数据
                        plistview.onRefreshComplete();   //停止刷新
                    }
                },3000);   //延迟3秒
                myAdapter.notifyDataSetInvalidated();   //刷新适配器
            }
        });
    }

//AsyncTask异步请求
    private void getData(final int num) {
        new AsyncTask<String, Integer, String>() {
            @Override
            protected String doInBackground(String... strings) {
                try {
                    URL url = new URL(strings[0]);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setConnectTimeout(5000);
                    urlConnection.setRequestMethod("GET");
                    if(urlConnection.getResponseCode()==200){
                        InputStream inputStream = urlConnection.getInputStream();
                        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                        byte[] bytes = new byte[1024];
                        int len = 0;
                        while ((len=inputStream.read(bytes))!=-1){
                            outputStream.write(bytes,0,len);
                        }
                        String json = outputStream.toString();
                        inputStream.close();
                        outputStream.close();
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                try {
                //原生解析
                    JSONArray jsonArray = new JSONArray(s);
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    JSONArray data = jsonObject.getJSONArray("data");
                    //如果第一页数据   缓存到数据库   //这一步没要求缓存的时候不用写
                    if(num==1){
                        newdata = new JSONArray();
                    }
                    //循环添加到集合  在列表上展示出来
                    for (int i = 0;i<data.length();i++){
                        newdata.put(data.get(i));
                    }

                    //适配器
                    myAdapter = new MyAdapter(getActivity(), newdata);
                    plistview.setAdapter(myAdapter);
                    //显示新的一页

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }.execute(path);
    }
}


//-----------------------------适配器内容----------------------------------

public class MyAdapter extends BaseAdapter {
    private Context context;
    private JSONArray list;
    private ImageLoader imageLoader = ImageLoader.getInstance();
    private DisplayImageOptions builder;

    public MyAdapter(Context context, JSONArray list) {
        this.context = context;
        this.list = list;

        builder = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)

                .build();
    }

    @Override
    public int getCount() {
        return list.length();
    }

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

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

    @Override
    public View getView(int position, View contentview, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        if(contentview==null){
            contentview = View.inflate(context, R.layout.item,null);
            viewHolder = new ViewHolder();
            viewHolder.img = contentview.findViewById(R.id.img);
            viewHolder.title = contentview.findViewById(R.id.title);
            contentview.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) contentview.getTag();
        }
        try {
            JSONObject jsonObject = list.getJSONObject(position);
            String title = jsonObject.getString("title");
            viewHolder.title.setText(title);
            String img = jsonObject.getString("img");
            imageLoader.displayImage(img,viewHolder.img,builder);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return contentview;
    }

    class ViewHolder{
        public ImageView img;
        public TextView title;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43936560/article/details/86559041