Android網路操作的幾種方法

來源:互聯網
上載者:User

標籤:

安卓開發軟體:AndroidStudio

伺服器軟體:Myeclipse+Tomcat

首先無論是哪種方式,安卓手機軟體要想連網,必須要申請連網許可權(android.permission.INTERNET)。

安卓主線程不允許做耗時操作(連網操作就是一種耗時操作),所以下面的的網路操作都是通過內部匿名類另起的一個線程操作的。

一,第一種方式:使用HttpURLConnection進行連網操作

  這個方法需要我們手動構建一個http請求包,發送到指定的伺服器

  1. get方式
    1. 設定URL
    2. 開啟串連
    3. 佈建要求方法為get
    4. 設定連線逾時時間
    5. 設定讀取逾時時間
    6. 把當前的request發送到伺服器端
    7. 等待伺服器的響應(此處會阻塞)
    8. 獲得響應碼(並在響應碼中做相應的操作),因為安卓子線程內不允許做UI更新的操作,所以需要轉到主線程來做(通過安卓中的handler來將資訊傳遞到主線程)
      public void getPic(View v){        new Thread(new Runnable() {            @Override            public void run() {                try {                    //首先要支出伺服器的地址                    URL url=new URL("http://192.168.2.1/day10_NetworkServer/brushli.jpg");                    //通過http串連                    HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();                    //佈建要求方式,並設定等待回應時間                    httpurlConnection.setRequestMethod("GET");                    httpurlConnection.setConnectTimeout(5000);                    //把當前的request發送到伺服器(安卓不允許在主線程內做耗時操作,如串連伺服器)                    httpurlConnection.connect();                    //發送完串連後等待操作,這個是阻塞式方法,                    int responseCode = httpurlConnection.getResponseCode();                    //根據得到的響應代碼和response的資訊作出相應的操作                    if(responseCode==200){                        //從伺服器讀取正確與否的資訊                        InputStream is=httpurlConnection.getInputStream();                        File file=new File("/data/data/com.rgd.day10_network_3/files");                        file.mkdir();                        FileOutputStream fos=new FileOutputStream(new File("/data/data/com.rgd.day10_network_3/files/brushli.jpg"));                        byte[] buffer=new byte[1024];                        int read;                        while ((read =is.read(buffer))!=-1){                            fos.write(buffer,0,read);                        }                        //由於子線程不允許做UI更新操作,與要通過Handler進行和主線程的通訊操作                        Message msg=new Message();                        msg.what=1;                        handler.sendMessage(msg);                        fos.close();                        is.close();                    }                } catch (MalformedURLException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch(msg.what){                case 1:                    Toast.makeText(MainActivity.this, "儲存圖片成功", Toast.LENGTH_LONG).show();                    break;                case 2:                    Toast.makeText(MainActivity.this,"儲存MP3成功",Toast.LENGTH_LONG).show();                    break;                case 3:                    Toast.makeText(MainActivity.this,"儲存視頻成功",Toast.LENGTH_SHORT).show();                default:                    break;            }        }    };
      View Code  

    2.post方式  

    • 操作跟get差不多,除了post傳遞資訊是通過本文傳遞的,而get是放在串連中的
    • new Thread(new Runnable() {                @Override                public void run() {                    try {                        //首先要支出伺服器的地址                        URL url=new URL("http://192.168.106.1/day10_NetworkServer/servlet/loginInfo");                        //通過http串連                        HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();                        //佈建要求方式,並設定等待回應時間                        httpurlConnection.setRequestMethod("POST");                        httpurlConnection.setConnectTimeout(5000);                        String data="username="+username+"&password="+password+"&email="+email+"&phonenumber="+phonenumber;                        OutputStream outputStream = httpurlConnection.getOutputStream();                        outputStream.write(data.getBytes());                        //把當前的request發送到伺服器(安卓不允許在主線程內做耗時操作,如串連伺服器)                        httpurlConnection.connect();                        //發送完串連後等待操作,這個是阻塞式方法,                        int responseCode = httpurlConnection.getResponseCode();                        //根據得到的響應代碼和response的資訊作出相應的操作                        if(responseCode==200){                            //從伺服器讀取正確與否的資訊                            InputStream is=httpurlConnection.getInputStream();                            byte[] buffer=new byte[1024];                            int read = is.read(buffer);                            String result=new String(buffer,0,read);                            //由於子線程不允許做UI更新操作,與要通過Handler進行和主線程的通訊操作                            Message msg=new Message();                            msg.what=1;                            handler.sendMessage(msg);                        }else{                            Message msg=new Message();                            msg.what=-1;                            handler.sendMessage(msg);                        }                    } catch (MalformedURLException e) {                        e.printStackTrace();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }).start();
      View Code

     3.通過  

 

      

Android網路操作的幾種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.