1. 程式人生 > >HttpURLConnection聯網請求工具類

HttpURLConnection聯網請求工具類

package com.example.abnerming.httputil.net;

import android.os.Handler; import android.os.Message;

import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * 第一,建立一個類(Helper) ,建立構造 * 第二、寫出一個聯網的方法,寫出get和post方法 * 第三、在get或者post裡進行聯網請求 * 第四,請求回來資料後通過執行緒間通訊傳送到主執行緒 * 第五、寫出請求介面成功或者失敗或者其他 * 第六、在資料返回或者失敗時,呼叫介面 * * */

public class Helper { private final int HTTP_SUCCESS=100;//成功 private final int HTTP_FAIL=101;//成功

public Helper(){}


//get請求
public Helper get(String url){
    doHttp(0,url,"");
    return this;
}

//網路請求
private void doHttp(final int type, final String url, final String string){
    new Thread(){
        @Override
        public void run() {
            super.run();
            try {
                URL mUrl=new URL(url);
                HttpURLConnection connection= (HttpURLConnection)       mUrl.openConnection();
                String method="GET";
                if(type==1){
                    method="POST";
                }
                connection.setRequestMethod(method);//設定請求方法
                connection.setConnectTimeout(5000);//設定請求超時
                if(type==1){
                    //post請求新增引數
                    PrintWriter writer=new PrintWriter(connection.getOutputStream());
                    writer.write(string);
                    writer.flush();
                    writer.close();
                }


                connection.connect();
                int code=connection.getResponseCode();
                Message msg=Message.obtain();
                if(code==HttpURLConnection.HTTP_OK){
                    InputStream inputStream=connection.getInputStream();
                    String data=convertStream2String(inputStream);
                    msg.obj=data;
                    msg.what=HTTP_SUCCESS;
                }else{
                    msg.what=HTTP_FAIL;
                }

                handler.sendMessage(msg);

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();
}

private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        switch (msg.what){
            case HTTP_SUCCESS://成功
               String data=(String) msg.obj;
                listener.success(data);
                break;
            case HTTP_FAIL://失敗
                listener.fail();
                break;
        }
    }
};

//post請求
public Helper post(String url,String string){
    doHttp(1,url,string);
    return this;
}


//流轉字串
private   String convertStream2String(InputStream input){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();// 自帶快取的輸出流
    int len=-1;
    byte [] buffer = new byte[512];
    try {
        while((len = input.read(buffer))!=-1){
            baos.write(buffer, 0, len); // 將讀到的位元組,寫入baos
        }
        return new String(baos.toByteArray());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}


private HttpListener listener;
//傳遞介面
public void result(HttpListener listener){
    this.listener=listener;
}

public interface HttpListener{ void success(String data);//成功 void fail();//失敗 }

}