中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 網絡html源碼查看器詳解及實例

發布時間:2020-08-25 14:50:38 來源:腳本之家 閱讀:139 作者:lqh 欄目:移動開發

Android 網絡html源碼查看器詳解及實例

IO字節流的數據傳輸了解

Handler的基本使用

1.作品展示

2.需要掌握的知識

FileInputStream,FIleOutputStream,BufferInputStream,BufferOutStream的讀寫使用與區別

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

請求URL地址的基本步驟

使用UrlConnection請求一個url地址獲取內容:

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

Handler消息機制的寫法與基本原理

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


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

    3.子線程中創建一個Message對象,將獲取的數據綁定給msg
        Message msg = new Message();
        //另一種方式:Message msg = Messge.obtain;
        msg.obj = result;
    4.主線程中的handler對象在子線程中將message發送給主線程
        handler.sendMessage(msg);

    5.主線程中handlermessage方法接受子線程發來的數據,就可以做更新UI的操作。

3.知識詳解

消息機制原理

  1.Message:用來攜帶子線程中的數據。

  2.MessageQueue:用來存放所有子線程發來的Message.

  3.Handler:用來在子線程中發送Message,在主線程中接受Message,處理結果

  4.Looper:是一個消息循環器,一直循環遍歷MessageQueue,從MessageQueue中取一個Message,派發給Handler處理。

 Android 網絡html源碼查看器詳解及實例

                                                             handler原理.png

4.項目代碼

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,設置點擊事件
    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進行判斷URL是否為空
          if (TextUtils.isEmpty(url_str)) {
            Toast.makeText(MainActivity.this, "url地址不能為空的", Toast.LENGTH_SHORT).show();
            return;
          }
          System.out.println("oclick方法線程:"+Thread.currentThread().getName());
          //創建子線程對象
          new Thread(new Runnable() {
            @Override
            public void run() {

            try {
              System.out.println("oclick方法runnable線程:"+Thread.currentThread().getName());
              //4,請求URL地址
              //4.1創建一個URL對象
              URL url = new URL(url_str);
              //4.2獲取URLConnection對象
              HttpURLConnection connection = (HttpURLConnection) url.openConnection();
              //4.3位URLconnection設置請求參數
              connection.setRequestMethod("GET");
              connection.setConnectTimeout(5 * 1000);
              //4.4獲取請求響應碼并進行判斷
              int code = connection.getResponseCode();
              if (code == 200) {
                //4.5獲取數據并且解析成字符串
                InputStream inputStream = connection.getInputStream();
                //4.6進行獲取string數據讀出來的
                String results = StreamUtils.streanTosting(inputStream);
                //5,將數據顯示到TExtview 上
                //tv_sourceshow.setText(results);
                //☆☆☆3.子線中創建一個Message對象,為了攜帶子線程中獲取的數據給主線程。
                //Message msg = new Message();
                //msg.obj = result;//將獲取的數據封裝到msg中。
                //☆☆☆4.使用handler對象將message發送到主線程。
                //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.在主線程中創建一個Handler對象
  private Handler handler = new Handler(){
    //☆☆☆2.重寫handler的handlermessage方法,用來接收子線程中發來的消息
    public void handleMessage(android.os.Message msg) {
      //☆☆☆5.接收子線程發送的數據,處理數據。
      String result = (String) msg.obj;
      //☆☆☆6.當前方法屬于主線程可以做UI的更新
      //五.獲取服務器返回的內容,顯示到textview上
      tv_sourceshow.setText(result);
    };
  };
}

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

5.反思總結

1.對應web的http協議基本原理沒有了解,所以不太能理解網絡的傳輸

2.注意在配置文件中注冊獲取網絡權限,差點就gg了

3.開始接觸后臺的一些邏輯代碼有些不能很理解,不過這個過程中還是有收獲的,慢慢進行吧

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙门县| 崇义县| 大邑县| 金堂县| 山西省| 平塘县| 盐津县| 盖州市| 凌海市| 中阳县| 武平县| 五莲县| 洛宁县| 佳木斯市| 瑞丽市| 岑溪市| 通化县| 台东市| 密山市| 西城区| 天津市| 濮阳市| 兴安盟| 宜州市| 新绛县| 许昌市| 承德市| 武陟县| 清水县| 讷河市| 牟定县| 教育| 和顺县| 安塞县| 白河县| 丹江口市| 定襄县| 元阳县| 保靖县| 佛山市| 伊川县|