1. 程式人生 > >Android之Http通訊HttpConnection

Android之Http通訊HttpConnection

1.解析網站並顯示

因為要處理網頁讀取,需要開啟執行緒,並在UI上更新,則要使用handler

注意Handler匯入的是os包

下面是MainActivity

private WebView webView;
    private WebView webView;
    private Handler handler=new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_http_url_connection);
        webView=(WebView)findViewById(R.id.webview);
        
        new HttpThread("http://www.baidu.com",handler,webView).start();
        
    }

子執行緒類
public class HttpThread extends Thread {
    private String url=null;
    private Handler handler;
    private WebView webView;
    StringBuffer sb;

    public HttpThread(String url,Handler handler,WebView webView){
        this.url=url;
        this.handler=handler;
        this.webView=webView;
    }

    @Override
    public void run() {

        try {
            //獲取URL物件
            URL httpUrl=new URL(url);
            //通過URL物件獲取連線
            HttpURLConnection conn= (HttpURLConnection) httpUrl.openConnection();
            //設定 連線讀取時長
            conn.setReadTimeout(5000);
            //設定以get形式請求
            conn.setRequestMethod("GET");
            //字串流
            sb=new StringBuffer();
            //獲得連線的位元組輸入流
            InputStream is=conn.getInputStream();
            //將位元組輸入流轉換為字元輸入流
            InputStreamReader isr=new InputStreamReader(is);
            //載入到快取流中,只有快取流可以直接讀一行
            BufferedReader reader=new BufferedReader(isr);
            String str;
            while ((str=reader.readLine())!=null){
                sb.append(str);
            }

            //使用post(),在runable中更新UI
            handler.post(new Runnable() {
                @Override
                public void run() {
                   webView.loadData(sb.toString(),"text/html;charset=utf-8",null);
                }
            });


        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

2.解析圖片網址,先儲存在外部儲存中,在通過bitmap獲取到UI中

在MainActivity中開啟執行緒

下面的網址一定要是一個圖片網址,即字尾以,jpg或其他圖片格式顯示

new HttpThread("http://pic.sc.chinaz.com/files/pic/pic9/201512/apic17727.jpg",handler,imageView).start();

子執行緒類
public class HttpThread extends Thread {
    private String url=null;
    private Handler handler;
    private ImageView imageView;


    public HttpThread(String url,Handler handler,ImageView imageView){
        this.url=url;
        this.handler=handler;
        this.imageView=imageView;
    }

    @Override
    public void run() {
        try {
            URL httpUrl=new URL(url);
            //通過URL物件獲取連線
            HttpURLConnection conn= (HttpURLConnection) httpUrl.openConnection();
            //設定 連線讀取時長
            conn.setReadTimeout(5000);
            //設定以get形式請求
            conn.setRequestMethod("GET");
            //文件上只是寫著設定連線允許輸入,不知道是什麼意思
            conn.setDoInput(true);
            InputStream in=conn.getInputStream();
            FileOutputStream out=null;
            File downloadFile=null;

            Log.i("info","進入到HttpThread中");
            String fileName=String.valueOf(System.currentTimeMillis());
            //只有在SD卡狀態為MEDIA_MOUNTED時,/mmt/sdcard目錄才是可讀可寫的,並且可以建立目錄及檔案
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

                //獲取外部儲存路徑,外部儲存不一定是sd卡,還包括手機自帶的記憶體,內部儲存是指data/data/包名下的
                File parent=Environment.getExternalStorageDirectory();
                //在獲取的目錄下新建檔名為fileName的檔案
                downloadFile=new File(parent,fileName);
                //檔案輸出流
                out=new FileOutputStream(downloadFile);

            }
            byte[] b=new byte[2*1024];
            int len;

            if(out!=null){
                //通過位元組流的讀取方法,以陣列為快取
                while((len=in.read(b))!=-1){
                    out.write(b,0,len);
                }

            }

            //通過指定sd卡圖片檔案路徑來獲取bitmap
            final Bitmap bitmap= BitmapFactory.decodeFile(downloadFile.getAbsolutePath());
            handler.post(new Runnable() {
                @Override
                public void run() {
                    Log.i("info","寫入成功");
                    imageView.setImageBitmap(bitmap);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}


上面獲取網頁圖片是先存到外部儲存中,然後在將圖片從外部儲存中取出來,當然可以直接通過網頁來獲取,下面的程式碼只是將獲取的方式從檔案改為了流

URL httpUrl=new URL(url);
            HttpURLConnection connection=(HttpURLConnection)httpUrl.openConnection();
            connection.setReadTimeout(5000);
            connection.setRequestMethod("GET");
            InputStream in=connection.getInputStream();
            //通過獲取網上的輸入流,來將圖片傳給Bitmap
            final Bitmap bitmap= BitmapFactory.decodeStream(in);

            //同樣通過post更新UI
            handler.post(new Runnable() {
                @Override
                public void run() {
                    imageView.setImageBitmap(bitmap);
                }
            });


相關推薦

AndroidHttp通訊HttpConnection

1.解析網站並顯示 因為要處理網頁讀取,需要開啟執行緒,並在UI上更新,則要使用handler 注意Handler匯入的是os包 下面是MainActivity private WebView webView; private WebView webView;

AndroidHttp通訊——4.Android HTTP請求方式:HttpClient

本節引言: 上節講了HttpURLConnection,本節就到HttpClient了,Apache給我們提供的HttpClient(簡單的Http客戶端),不過畢竟不是親兒子,HttpClient在API 21版本後就給Google棄用了,而我

AndroidHttp通信——1.初識Http協議

網頁 ip協議 作用 建立連接時 lin 是什麽 方式 設置 全部 Android之Http通信——1.初識Http協議 引言: 今天是六一兒童節,先在這裏給各位超齡兒童說聲節日快樂哈~( ╯□╰ ),小豬也象征性地給群裏的小朋友們派了

AndroidSocket通訊

Android裡面使用Socket與伺服器之間進行通訊: 首先建立一個SocThread類 package com.junto.sockettest; import android.content.Context; import android.content.SharedPref

JAVA爬蟲初識HTTP通訊機制

最近接觸爬蟲相關知識,將學習和網上了解到的一些東西記錄下來,以便以後需要。(刪除重新發一次) HTTP通訊機制 HTTP(HyperText Transfer Protocol)是一套計算機通過網路進行通訊的規則。HTTP是一種無狀態的協議(Web瀏覽器和W

Android程序通訊——廣播

不同程序間的通訊,其實Android的四大元件都可以實現。 日常,我們用廣播,在一個獨立的app中使用的較多。或者是系統和app之間使用。 在兩個自定義的app之間,我們也寫個例子,表明廣播是很好用的!! 在這裡就自定義兩個app:BroadCastA(後面稱為A)、Bro

Android與伺服器端通訊方式(一)HTTP、TCP、Socket

      Android作為客戶端,與伺服器的通訊方式主要有兩種:一種是HTTP通訊,一種是Socket通訊。 一、HTTP、Socket簡介       HTTP通訊:即使用HTTP協議進行通訊,工作原理是客戶端向伺服器端傳送一條HTTP請求,伺服器收到之後先解析客戶

Android中的Http通訊(一)Http協議基本知識

寫了這麼久的專案,幾乎每個專案都用到了網路請求,不對,是所有的專案。一直沒有對這一塊做過詳細的總結,今天結合一些網上的資料以及自己的理解,來談談Http。廢話不多說,直奔正題吧...... 我們如果想要真正的瞭解Http,我們必須要知道什麼是Http? 一、什麼是Http?

Android 網路通訊HTTP請求通訊

Android網路通訊平臺支援還是比較豐富的,除了相容J2ME中的java.netapi外還提供了一下Android平臺獨有的類android.net這個Package。一種是GET方式,一種是POST方式。然後HttpClient的Get/Post方式。似乎更強大的是org.apache.http類,這個

android網路通訊-HttpAndroid操作HTTP實現與伺服器通訊

    Android系統中本身是有下載機制的,比如瀏覽器使用的DownloadManager。可遺憾的是,DownloadManager只提供給瀏覽器使用,一般的應用程式沒法呼叫它。 另外,如果下載呼叫頻繁的話,使用DownloadManager其實是很沒有效率的做法。為了解決這些問題,我想我們最好的辦法

Pythontcp server模擬Http通訊

1.python tcp server程式碼: 1 import socket 2 3 4 def main(): 5 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 6

Android HTTP通訊封裝(包括WebService的呼叫)

第一個物件: 該物件是呼叫WebService用的一個物件基類。 package Entity; import com.google.gson.Gson; import org.json.JSONObject; import java.lang.reflect.Field; impor

Spring Boot Http通訊資料加解密

1、應用背景     Spring Boot開發基於restful型別的API,我們再處理JSON請求時通常使用@RequestBody和@ResponseBody註解, 針對HTTP JSON請求需要解密和返回的JSON資料我們經常需要對資料進行加密

Android元件化元件通訊

Demo地址:https://github.com/751496032/ComponentDemo 本文是續上一篇Android元件化方案實踐與思考文章一些思考,主要是針對元件間通訊,比如: 每個元件如何初始化各自的資料 Activity間如何跳轉、Fragment例項

Android使用Http協議訪問網路——HttpConnection

本文轉載自:https://www.cnblogs.com/Liang-Blog/p/5760201.html 套路篇 使用HttpConnection訪問網路一般有如下的套路: 1.獲取到HttpConnection的例項,new出一個URL物件,並傳入目標的網址,然後呼叫一下open

AndroidUDP協議通訊

最近在做的專案中用到了UDP協議來通訊,整理了一下,可以與PC端網路助手之間進行測試。下面將主要功能程式碼寫在下面供搭建參考: UDPSocketClientManage public class UDPSocketClientManage { // 伺服器IP

android進階3step2:Android App通訊——Https和Http通訊

 需要了解的知識  X.509數字證書的結構與解析 計算機網路:這是一份全面& 詳細 HTTP知識講解  Https 實戰 • 主要用到的API介紹 – HttpsURLConnection (HttpURLConn

AndroidIPC程序通訊方案適用場景總結

IPC是 Inter-Proscess Communication的縮寫,含義為程序間的通訊或者跨程序通訊,是指兩個程序之間進行資料交換的過程。 名稱 優點 缺點 適用場景 Bundle 簡單易用 只能傳輸Bundle支援的資料型別 四大元件間的

我的Android NDK旅(四),android串列埠通訊-mac+串列埠除錯工具

一些關於串列埠的知識 什麼是串列埠 串列埠是計算機上一種非常通用裝置通訊的協議,不要與通用序列匯流排Universal Serial Bus(USB)混淆。大多數計算機包含兩個基於RS232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議;很多GP

快速Android開發系列通訊EventBus

先吐槽一下部落格園的MarkDown編輯器,推出的時候還很高興部落格園支援MarkDown了,試用了下發現支援不完善就沒用了,這次這篇是在其他編輯器下寫的,複製過來後發現。。太爛了。怎麼著作為一個技術部落格社群,對程式碼的支援應該完善一下吧,`行內程式碼塊`不支援就算了,程式碼段內還不能有空行,一有空行就識別