最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 網(wǎng)絡(luò)html源碼查看器詳解及實(shí)例

 更新時(shí)間:2017年03月24日 08:36:39   投稿:lqh  
這篇文章主要介紹了Android 網(wǎng)絡(luò)html源碼查看器詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

Android 網(wǎng)絡(luò)html源碼查看器詳解及實(shí)例

IO字節(jié)流的數(shù)據(jù)傳輸了解

Handler的基本使用

1.作品展示

2.需要掌握的知識(shí)

FileInputStream,FIleOutputStream,BufferInputStream,BufferOutStream的讀寫使用與區(qū)別

//進(jìn)行流的讀寫
     byte[] buffer = new byte[1024 * 8];
     //創(chuàng)建一個(gè)寫到內(nèi)存的字節(jié)數(shù)組輸出流
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
     int len;
     while ((len = inputStream.read(buffer)) != -1) {
       byteArrayOutputStream.write(buffer,0,len);
       byteArrayOutputStream.flush();//不斷的刷新緩存
     }
     byteArrayOutputStream.close();//進(jìn)行關(guān)閉流通道
     result = byteArrayOutputStream.toString();//將寫入的字節(jié)流轉(zhuǎn)化為字符串

請(qǐng)求URL地址的基本步驟

使用UrlConnection請(qǐng)求一個(gè)url地址獲取內(nèi)容:

     //1.創(chuàng)建一個(gè)Url對(duì)象
       URL url = new URL(url_str);
     //2.獲取一個(gè)UrlConnection對(duì)象
       HttpURLConnection connection = (HttpURLConnection)url.openConnection();
     //3.為UrlConnection對(duì)象設(shè)置一些請(qǐng)求的參數(shù),請(qǐng)求方式,連接的超時(shí)時(shí)間 
       connection.setRequestMethod("GET");//設(shè)置請(qǐng)求方式
       connection.setConnectTimeout(1000*10);//設(shè)置超時(shí)時(shí)間
     //4.在獲取url請(qǐng)求的數(shù)據(jù)前需要判斷響應(yīng)碼,200 :成功,206:訪問(wèn)部分?jǐn)?shù)據(jù)成功  300:跳轉(zhuǎn)或重定向 400:錯(cuò)誤 500:服務(wù)器異常
       int code = connection.getResponseCode();
       if(code == 200){
     //5.獲取有效數(shù)據(jù),并將獲取的流數(shù)據(jù)解析成String
         InputStream inputStream = connection.getInputStream();
         String result = StreamUtils.streamToString(inputStream);

Handler消息機(jī)制的寫法與基本原理

  1.主線程中創(chuàng)建一個(gè)Handler
    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {


        };
    };
    2.重寫handler的handlermessage方法

    3.子線程中創(chuàng)建一個(gè)Message對(duì)象,將獲取的數(shù)據(jù)綁定給msg
        Message msg = new Message();
        //另一種方式:Message msg = Messge.obtain;
        msg.obj = result;
    4.主線程中的handler對(duì)象在子線程中將message發(fā)送給主線程
        handler.sendMessage(msg);

    5.主線程中handlermessage方法接受子線程發(fā)來(lái)的數(shù)據(jù),就可以做更新UI的操作。

3.知識(shí)詳解

消息機(jī)制原理

  1.Message:用來(lái)攜帶子線程中的數(shù)據(jù)。

  2.MessageQueue:用來(lái)存放所有子線程發(fā)來(lái)的Message.

  3.Handler:用來(lái)在子線程中發(fā)送Message,在主線程中接受Message,處理結(jié)果

  4.Looper:是一個(gè)消息循環(huán)器,一直循環(huán)遍歷MessageQueue,從MessageQueue中取一個(gè)Message,派發(fā)給Handler處理。

 

                                                             handler原理.png

4.項(xiàng)目代碼

public class MainActivity extends AppCompatActivity {
  private EditText et_url;
  private Button btn_looksource;
  private TextView tv_sourceshow;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //1,找到控件ID
    et_url = (EditText)findViewById(R.id.ev_url);
    btn_looksource = (Button)findViewById(R.id.btn_looksource);
    tv_sourceshow = (TextView)findViewById(R.id.source_show);
    //2,設(shè)置點(diǎn)擊事件
    btn_looksource.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        try {
          //3,獲取URL地址
          final String url_str = et_url.getText().toString().trim();
          //String results ="";
          //3.1進(jìn)行判斷URL是否為空
          if (TextUtils.isEmpty(url_str)) {
            Toast.makeText(MainActivity.this, "url地址不能為空的", Toast.LENGTH_SHORT).show();
            return;
          }
          System.out.println("oclick方法線程:"+Thread.currentThread().getName());
          //創(chuàng)建子線程對(duì)象
          new Thread(new Runnable() {
            @Override
            public void run() {

            try {
              System.out.println("oclick方法runnable線程:"+Thread.currentThread().getName());
              //4,請(qǐng)求URL地址
              //4.1創(chuàng)建一個(gè)URL對(duì)象
              URL url = new URL(url_str);
              //4.2獲取URLConnection對(duì)象
              HttpURLConnection connection = (HttpURLConnection) url.openConnection();
              //4.3位URLconnection設(shè)置請(qǐng)求參數(shù)
              connection.setRequestMethod("GET");
              connection.setConnectTimeout(5 * 1000);
              //4.4獲取請(qǐng)求響應(yīng)碼并進(jìn)行判斷
              int code = connection.getResponseCode();
              if (code == 200) {
                //4.5獲取數(shù)據(jù)并且解析成字符串
                InputStream inputStream = connection.getInputStream();
                //4.6進(jìn)行獲取string數(shù)據(jù)讀出來(lái)的
                String results = StreamUtils.streanTosting(inputStream);
                //5,將數(shù)據(jù)顯示到TExtview 上
                //tv_sourceshow.setText(results);
                //☆☆☆3.子線中創(chuàng)建一個(gè)Message對(duì)象,為了攜帶子線程中獲取的數(shù)據(jù)給主線程。
                //Message msg = new Message();
                //msg.obj = result;//將獲取的數(shù)據(jù)封裝到msg中。
                //☆☆☆4.使用handler對(duì)象將message發(fā)送到主線程。
                //handler.sendMessage(msg);
                Message msg = new Message();
                msg.obj = results;
                handler.sendMessage(msg);
              }
            }catch (Exception e) {
              e.printStackTrace();
            }

          }
          }).start();


        }catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }
  //☆☆☆1.在主線程中創(chuàng)建一個(gè)Handler對(duì)象
  private Handler handler = new Handler(){
    //☆☆☆2.重寫handler的handlermessage方法,用來(lái)接收子線程中發(fā)來(lái)的消息
    public void handleMessage(android.os.Message msg) {
      //☆☆☆5.接收子線程發(fā)送的數(shù)據(jù),處理數(shù)據(jù)。
      String result = (String) msg.obj;
      //☆☆☆6.當(dāng)前方法屬于主線程可以做UI的更新
      //五.獲取服務(wù)器返回的內(nèi)容,顯示到textview上
      tv_sourceshow.setText(result);
    };
  };
}

public class StreamUtils {
  public static String streanTosting(InputStream inputStream){
    String result = "";//保存字符串
    try {
      //進(jìn)行流的讀寫
      byte[] buffer = new byte[1024 * 8];
      //創(chuàng)建一個(gè)寫到內(nèi)存的字節(jié)數(shù)組輸出流
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      int len;
      while ((len = inputStream.read(buffer)) != -1) {
        byteArrayOutputStream.write(buffer,0,len);
        byteArrayOutputStream.flush();//不斷的刷新緩存
      }
      byteArrayOutputStream.close();//進(jìn)行關(guān)閉流通道
      result = byteArrayOutputStream.toString();//將寫入的字節(jié)流轉(zhuǎn)化為字符串
    }catch (Exception e){
      e.printStackTrace();
    }
    return result;
  }
}

5.反思總結(jié)

1.對(duì)應(yīng)web的http協(xié)議基本原理沒(méi)有了解,所以不太能理解網(wǎng)絡(luò)的傳輸

2.注意在配置文件中注冊(cè)獲取網(wǎng)絡(luò)權(quán)限,差點(diǎn)就gg了

3.開始接觸后臺(tái)的一些邏輯代碼有些不能很理解,不過(guò)這個(gè)過(guò)程中還是有收獲的,慢慢進(jìn)行吧

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Jetpack?Compose入門基礎(chǔ)全面精講

    Jetpack?Compose入門基礎(chǔ)全面精講

    開始布局部分。這部分我個(gè)人感覺(jué)沒(méi)有必要每個(gè)組件、屬性都詳細(xì)說(shuō)到,否則篇幅會(huì)很長(zhǎng)。建立起Compose中的組件與?Android?Views的一個(gè)對(duì)應(yīng)關(guān)系就夠了。具體還是需要在實(shí)際的使用中去熟悉
    2022-10-10
  • RxJava和Retrofit2的統(tǒng)一處理單個(gè)請(qǐng)求示例詳解

    RxJava和Retrofit2的統(tǒng)一處理單個(gè)請(qǐng)求示例詳解

    這篇文章主要給大家介紹了關(guān)于RxJava和Retrofit2的統(tǒng)一處理單個(gè)請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Android 使用ContentObserver監(jiān)聽數(shù)據(jù)庫(kù)內(nèi)容是否更改

    Android 使用ContentObserver監(jiān)聽數(shù)據(jù)庫(kù)內(nèi)容是否更改

    這篇文章主要介紹了Android 使用ContentObserver監(jiān)聽數(shù)據(jù)庫(kù)內(nèi)容是否更改的相關(guān)資料,ContentObserver內(nèi)容觀察者,目的是觀察(捕捉)特定Uri引起的數(shù)據(jù)庫(kù)的變化,需要的朋友可以參考下
    2017-08-08
  • Kotlin開發(fā)中open關(guān)鍵字與類名函數(shù)名和變量名的使用方法淺析

    Kotlin開發(fā)中open關(guān)鍵字與類名函數(shù)名和變量名的使用方法淺析

    這篇文檔中,我們將解釋如何以及為什么將 open 關(guān)鍵字與類名、函數(shù)名和變量名一起使用,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時(shí)也是驗(yàn)證了一個(gè)人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會(huì)的
    2023-02-02
  • 詳解Android業(yè)務(wù)組件化之URL Schema使用

    詳解Android業(yè)務(wù)組件化之URL Schema使用

    這篇文章主要為大家詳細(xì)介紹了Android業(yè)務(wù)組件化之URL Schema使用,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android隱藏手機(jī)底部虛擬按鍵的方法

    Android隱藏手機(jī)底部虛擬按鍵的方法

    這篇文章主要為大家詳細(xì)介紹了Android隱藏手機(jī)底部虛擬按鍵的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android集成百度地圖開發(fā)流程和注意事項(xiàng)

    Android集成百度地圖開發(fā)流程和注意事項(xiàng)

    現(xiàn)在很多項(xiàng)目都需要集成百度地圖,所以就把自己做過(guò)一個(gè)項(xiàng)目的經(jīng)驗(yàn)寫出來(lái)和大家分享,方便自己和大家使用的時(shí)候參考借鑒,下面就來(lái)一起看看Android集成百度地圖開發(fā)流程和注意事項(xiàng)吧。
    2016-09-09
  • Android編程實(shí)現(xiàn)Toast自定義布局簡(jiǎn)單示例

    Android編程實(shí)現(xiàn)Toast自定義布局簡(jiǎn)單示例

    這篇文章主要介紹了Android編程實(shí)現(xiàn)Toast自定義布局的方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了Toast自定義布局的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • Android 中 MD5 的幾種生成方式(小結(jié))

    Android 中 MD5 的幾種生成方式(小結(jié))

    這篇文章主要介紹了Android 中 MD5 的幾種生成方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Android實(shí)現(xiàn)應(yīng)用程序的閃屏效果

    Android實(shí)現(xiàn)應(yīng)用程序的閃屏效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)應(yīng)用程序的閃屏效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論

乐至县| 潜山县| 石楼县| 报价| 北京市| 巴彦淖尔市| 赫章县| 锡林浩特市| 东乡县| 佛学| 梓潼县| 鱼台县| 鄢陵县| 调兵山市| 高邮市| 改则县| 清镇市| 漠河县| 宝坻区| 北碚区| 洞头县| 志丹县| 鄄城县| 皮山县| 莱阳市| 子洲县| 扎赉特旗| 鄂托克旗| 遂宁市| 满城县| 分宜县| 昭觉县| 景谷| 达州市| 文安县| 苏尼特左旗| 丽江市| 丽水市| 永宁县| 富裕县| 大余县|