HttpURLConection(get¥¥ post)网络请求+XListView

public class UrlUtils {
    /**
         * HttpURLConnection的post请求
         * @param urlPath
         * @param map
         * @return
         */
        public static String postUrlConnect(String urlPath, Map map){
           StringBuffer sbRequest =new StringBuffer();
            if(map!=null&&map.size()>0){
                for (String key:map.keySet()){
                    sbRequest.append(key+"="+map.get(key)+"&");
                }
            }
            String request = sbRequest.substring(0,sbRequest.length()-1);
            try {
                //创建URL
                URL url = new URL(urlPath);
                //由URL的openConnection方法得到一个HttpURLConnection(需要强转)
                HttpURLConnection httpURLConnection =
                        (HttpURLConnection) url.openConnection();
                //设置post提交
                httpURLConnection.setRequestMethod("POST");
                //设置超时时间
                httpURLConnection.setConnectTimeout(30000);
                httpURLConnection.setReadTimeout(30000);

                httpURLConnection.setDoInput(true);
                httpURLConnection.setDoOutput(true);

                //把请求正文通过OutputStream发出去
                OutputStream os =httpURLConnection.getOutputStream();
                os.write(request.getBytes());
                os.flush();

                //判断响应码  200 代表成功
                if(httpURLConnection.getResponseCode()==200){
                    //由HttpURLConnection拿到输入流
                    InputStream in=httpURLConnection.getInputStream();
                    StringBuffer sb=new StringBuffer();
                    //根据输入流做一些IO操作
                    byte [] buff =new byte[1024];
                    int len=-1;
                    while((len=in.read(buff))!=-1){
                        sb.append(new String(buff,0,len,"utf-8"));
                    }

                    in.close();
                    os.close();
                    httpURLConnection.disconnect();
                    return  sb.toString();
                }else{
                    return null;
                }

            }catch (Exception e){
                Log.e("post","code:"+e.getMessage());
                return null;
            }
        }

        /**
         * HttpURLConnection的get请求
         * @param urlPath
         * @return
         */
        public static String getUrlConnect(Context context,String urlPath){

            try {
                //创建URL
                URL url = new URL(urlPath);
                //由URL的openConnection方法得到一个HttpURLConnection(需要强转)
                HttpURLConnection httpURLConnection =
                        (HttpURLConnection) url.openConnection();
                //设置连接
                httpURLConnection.connect();
                //判断响应码  200 代表成功
                if(httpURLConnection.getResponseCode()==200){
                    //由HttpURLConnection拿到输入流
                    InputStream in=httpURLConnection.getInputStream();
                    StringBuffer sb=new StringBuffer();
                    File file =new File(context.getExternalCacheDir(),getMD5(urlPath));
                    FileOutputStream fos=new FileOutputStream(file);
                    //根据输入流做一些IO操作
                    byte [] buff =new byte[1024];
                    int len=-1;
                    while((len=in.read(buff))!=-1){
                        fos.write(buff,0,len);
                        sb.append(new String(buff,0,len,"utf-8"));
                    }
                    fos.flush();
                    fos.close();
                    in.close();
                    httpURLConnection.disconnect();
                    return  sb.toString();
                }else{
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

    /**
     * 对字符串md5加密
     *
     * @param str
     * @return
     */
    public static String getMD5(String str) {
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 计算md5函数
            md.update(str.getBytes());
            // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
            // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
            return new BigInteger(1, md.digest()).toString(16);
        } catch (Exception e) {
            return str;
        }
    }

}

==================================================

package com.wz.xlistdemo;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import me.maxwin.view.XListView;

public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{
    private XListView lv;
    private TextView tv;
    private List list = new ArrayList<>();
    private MyAdapter adapter;
    private int startNum = 0;
    private String urlPath = "http://www.93.gov.cn/93app/data.do?channelId=0&startNum=";

    private Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Gson gson=new Gson();
            Data data=gson.fromJson(msg.obj.toString(),Data.class);
            list.addAll(data.getData());
            adapter.notifyDataSetChanged();
            updateCache();
            stopXList();
        }
    };

    private void stopXList() {
        lv.stopRefresh();
        lv.stopLoadMore();
        lv.setRefreshTime("刚刚");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

        loadData();
    }

    private void loadData() {
        File file =new File(getExternalCacheDir(),UrlUtils.getMD5(urlPath+startNum));
        if(file.exists()){
            Toast.makeText(MainActivity.this, "从本地获取", Toast.LENGTH_SHORT).show();
            try {
                BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                StringBuffer sb=new StringBuffer();
                String line = "";
                while((line=br.readLine())!=null){
                    sb.append(line);
                }
                br.close();

                Message msg=Message.obtain();
                msg.what=1;
                msg.obj=sb.toString();
                mHandler.sendMessage(msg);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{
            Toast.makeText(MainActivity.this, "从网络获取", Toast.LENGTH_SHORT).show();
            new Thread(){
                @Override
                public void run() {
                    String result = UrlUtils.getUrlConnect(MainActivity.this,urlPath+startNum);
                    Message msg=Message.obtain();
                    msg.what=1;
                    msg.obj=result;
                    mHandler.sendMessage(msg);
                }
            }.start();
        }
    }

    private void updateCache() {
        File file=getExternalCacheDir();
        long size = 0;
        if(file.isDirectory()){
            File [] files = file.listFiles();
            for(File f:files){
                size+=f.length();
            }
        }

        Double d=size/1024.0;

        tv.setText(new java.text.DecimalFormat("#.00").format(d)+"KB");
    }

    private void initView() {
        lv= (XListView) findViewById(R.id.lv);
        tv= (TextView) findViewById(R.id.tv);
        adapter =new MyAdapter(this,list,R.layout.item);
        lv.setAdapter(adapter);
        lv.setPullLoadEnable(true);
        lv.setXListViewListener(this);
    }

    @Override
    public void onRefresh() {
        startNum=0;
        list.clear();
        loadData();
    }

    @Override
    public void onLoadMore() {
        startNum=list.size();
        loadData();
    }
}



你可能感兴趣的:(XListView)