最簡易的網路框架封裝(新手可看)
阿新 • • 發佈:2019-02-02
#涉及知識點
1、HTTP網路請求,HttpURLConnnection的使用
2、簡單執行緒
3、定義介面,實現回撥
如果僅僅實現這個功能需要的java程式碼絕對在10行以下,但是本片主要是講一下簡易框架的封裝。
#封裝目的:
1、在同一個專案中,我們要執行網路操作可定不想要每次都編寫一遍HTTP請求的程式碼。通常情況我們都會將這些網路操作提取到一個公共的類裡面,並提供一個靜態方法。
2、HTTP請求操作一般為耗時操作需要放入執行緒。
3、線上程中需要返回從伺服器獲取的資料,要使用java的回撥機制。
框架搭建好之後,程式碼的呼叫如下。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvMain=(TextView)findViewById(R.id.tv_main); HttpUtill.sendHttpRequest("https://www.baidu.com/", new HttpUtill.HttpCallbackListener() { @Override public void onSuccess(String response) { tvMain.setText(response); } @Override public void onError(Exception e) { tvMain.setText(e.getMessage()); } }); }
封裝的程式碼也是非常簡單:
public class HttpUtill { //為了實現回撥,定義一個介面 public interface HttpCallbackListener{ void onSuccess(String response); void onError(Exception e); } public static void sendHttpRequest(final String mUrl,final HttpCallbackListener listener) { //此處使用執行緒 new Thread(new Runnable(){ @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL(mUrl); connection = (HttpURLConnection) url.openConnection(); InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader((new InputStreamReader(in))); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } if(listener!=null){ listener.onSuccess(response.toString()); } } catch (Exception e) { e.printStackTrace(); if(listener!=null){ listener.onError(e); } } finally { if (connection != null) { connection.disconnect(); } } } }).start(); } }