HttpURLConnection聯網請求工具類
阿新 • • 發佈:2018-12-09
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();//失敗 }
}