国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android Http協議訪問網絡實例(3種)

2019-10-22 18:32:17
字體:
來源:轉載
供稿:網友

之前關于Android Http協議訪問網絡的一點分析,最近需要回顧,就順便發到隨筆上了

Android中http連接主要是為了獲取網絡數據,目前了解的有3種方法:

  1. Httpconnection ——本人常用
  2. OKHTTP——看見過(需要在依賴中引入包)
  3. HttpClient——過氣的方法(棄用)

HTTPCONNECTION

由于網絡連接是耗時操作不能在UI線程操作,一般通過Handler獲取子線程中獲取的數據

Handler mhandler=new Handler(){    @Override    public void handleMessage(Message msg) {      super.handleMessage(msg);      //數據處理邏輯    }  };

如何在UI線程中調用Http方法類(很久以前琢磨了很久):

new JsonText(mhandler);

返回的類型都是String,這里直接寫在一個類里以后方便用

public class JsonTest {  Handler handler;  public JsonTest(Handler handler) {    this.handler = handler;    thread.start();  }  Thread thread=new Thread(new Runnable() {    @Override    public void run() {      Message msg=new Message();      try{        InputStream in=null;        HttpURLConnection connection=null;        URL url=new URL("http://guolin.tech/api/china");        connection=(HttpURLConnection)url.openConnection();        connection.setRequestMethod("GET");//設置請求方式,可以不設置,默認是GET        connection.setConnectTimeout(5000);//設置請求超時時間        in=connection.getInputStream();        msg.arg1=0x01;        msg.obj=in.toString();        handler.sendMessage(msg);      }catch (Exception e){        e.printStackTrace();        msg.arg1=0x02;        handler.sendMessage(msg);      }finally {        connection.disconnect();      }    }  });}

代碼不復雜就不贅述了,接下來說其他幾點:

thread:

經常聽到有問sleep()和wait()有什么區別。sleep()方法來自thread類中,而wait()來自object類中;其次,sleep()方法調用的時候不出讓系統資源,wait()讓出系統資源其他線程可以占用CPU;最后,sleep(milliseconds)需要指定一個睡眠時間,時間一到會自動喚醒。

http(超文本傳輸協議) ,https(超文本傳輸協議安全版)

關于TCP/IP 和UPD:

TCP/IP比UDP穩定,但是慢,因為它有三次握手機制

關于三次握手:

網上有很多解釋,自己敘述就是主機先問服務器,我可以發數據了嗎,服務器回答,可以了,主機在說,那我發了。具體的內容以后在詳細理解,先上圖

Android,Http訪問網絡,訪問網絡,android網絡協議

OKHTTP

書上的描述是:出色的網絡通信庫可以用來代替Httpconnection。你說出色我就用咯。

添加依賴:

dependencies {compile 'com.squareup.okhttp3:okhttp:3.4.1'}

使用

OkHttpClient client =new OkHttpClient();//創建實例Request request =new Request.Builder().build();

通過url()訪問網絡:

Request request =new Request.Builder().url("www.baidu.com").build();

之后調用newCall()方法創建call對象,并調用excute()方法發送請求并獲取服務器數據:

Response response=client.newCall(request).excute();String str=response..body().toString();//得到值

說一下上述兩個方法都只說了get,沒有post(提交數據),原因是懶了,以后再說

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁甸县| 明水县| 永嘉县| 张北县| 枣阳市| 汉中市| 恭城| 红原县| 濮阳市| 葫芦岛市| 内黄县| 靖西县| 禄丰县| 张家界市| 民和| 儋州市| 平原县| 盈江县| 岳阳县| 太原市| 万山特区| 宁南县| 郑州市| 札达县| 集安市| 天全县| 青阳县| 沙洋县| 五指山市| 托里县| 松桃| 砚山县| 犍为县| 通江县| 临泉县| 崇信县| 商丘市| 朝阳区| 铜陵市| 赤壁市| 岚皋县|