最簡易的網路框架封裝(新手可看)

許佳佳233發表於2016-09-07

網路通訊在Android上的重要性就不多說了。
demo就是獲取到“https://www.baidu.com/”的HTML程式碼後顯示在textview中,如下圖:(原始碼在文章結尾)
這裡寫圖片描述

#涉及知識點
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();

    }
}

原始碼下載地址:http://download.csdn.net/detail/double2hao/9624231

相關文章