1. 程式人生 > >HTTP基礎與Android之——使用HttpClient和HttpURLConnection

HTTP基礎與Android之——使用HttpClient和HttpURLConnection

1、客戶端連線伺服器實現內部的原理:

這裡寫圖片描述

分析上圖,步驟如下:

第一步:在瀏覽器客戶端中得到使用者輸入的內容。

第二步:瀏覽器得到這個網址之後,內部會將這個域名傳送到DNS上,進行域名解析。得到它的IP之後就會連結到指定的伺服器上,假如伺服器的地址是:221.104.13.32:80,從瀏覽器到伺服器埠它使用到最底層的TCP/IP協議。

第三步:實現TCP/IP協議用Socket來完成,使用了Socket的套接字。

第四步:伺服器端的80埠監聽客戶端的連結,這樣客戶端到伺服器就連結上了。 
伺服器接收到這些內容之後,並按照這些請求的路徑找到對應的頁面,進一步找到對應的網頁內容,返回給客戶端。

通俗一點講,使用者在瀏覽器輸入網址,通過http協議發出去,網址經過DNS域名解析,解析成指定的ip地址,並在80埠上監聽使用者的請求。伺服器監聽到請求之後,會以三種方式返回給客戶端:HTML、XML、JASON。

GET方式和POST方式的差別:

GET是從伺服器上獲取資料,POST是向伺服器傳送資料。 
在客戶端,GET方式在通過URL提交資料,資料在URL中可以看到;POST方式,資料放在HTML HEADER內提交。 
對於GET方式,伺服器端用Request.QueryString獲取變數的值,對於POST方式,伺服器用Request.Form獲取提交的資料。 
GET方式提交的資料不能大於2KB(主要是URL長度限制),而POST則沒有此限制。 
安全性問題。正如2中提到,使用GET的時候,引數會顯示在位址列上,而POST不會。所以,如果這些資料是中文資料而且是非敏感資料,那麼使用GET;如果使用者輸入的資料不是中文字元而且包含敏感資料,那麼還是使用POST為好。

HTTP返回請求資料的三種方式:

1、以HTML程式碼內容返回。

2、以XML字串的形式返回,在以後的android開發中這種形式返回資料比較多。

3、以JSON物件形式返回,在網路流量上考慮JSON要比XML方式要好一些,便於解析。

在Android當中,一般使用xml和Json資料解析。

2、使用HTTP協議訪問網路:

Android中的WebView控制元件已經在後臺幫我們處理好了傳送HTTP請求、接收服務響應、解析返回資料,以及最終的頁面展示這幾步工作,不過由於它封裝得太好了,反而不能直觀地看出HTTP協議是如何工作的。因此接下來我們通過手動傳送HTTP請求的方式,來更加深入的瞭解這一過程。

在Android上傳送HTTP請求的方式一般有兩種:HttpURLConnection和HttpCient。我們先來學習HttpCient。

3、HttpCient:

HttpClient是Apache開源組織提供的HTTP網路訪問介面(一個開源的專案),從名字上就可以看出,它是一個簡單的HTTP客戶端(並不是瀏覽器),可以傳送HTTP請求,接受HTTP響應。但是不會快取伺服器的響應,不能執行HTTP頁面中籤入嵌入的JS程式碼,自然也不會對頁面內容進行任何解析、處理,這些都是需要開發人員來完成的。

現在Android已經成功集成了HttpClient,所以開發人員在Android專案中可以直接使用HttpClient來想Web站點提交請求以及接受響應,如果使用其他的Java專案,需要引入進相應的Jar包。HttpClient可以在官網上下載。官網連結:http://hc.apache.org/downloads.cgi

HttpClient其實是一個interface型別,HttpClient封裝了物件需要執行的Http請求、身份驗證、連線管理和其它特性。既然HttpClient是一個介面,因此無法建立它的例項。從文件上看,HttpClient有三個已知的實現類分別是:AbstractHttpClient, AndroidHttpClient, DefaultHttpClient,會發現有一個專門為Android應用準備的實現類AndroidHttpClient,當然使用常規的DefaultHttpClient也可以實現功能。

從兩個類包所有在位置就可以看出區別,AndroidHttpClient定義在android.net.http.AndroidHttpClient包下,屬於Android原生的http訪問,而DefaultHttpClient定義在org.apache.http.impl.client.DefaultHttpClient包下,屬於對apche專案的支援。而AndroidHttpClient沒有公開的建構函式,只能通過靜態方法newInstance()方法來獲得AndroidHttpClient物件。

簡單來說,用HttpClient傳送請求、接收響應都很簡單,只需要五大步驟即可:(要牢記)

1、建立代表客戶端的HttpClient物件。

2、建立代表請求的物件,如果需要傳送GET請求,則建立HttpGet物件,如果需要傳送POST請求,則建立HttpPost物件。注:對於傳送請求的引數,GET和POST使用的方式不同,GET方式可以使用拼接字串的方式,把引數拼接在URL結尾;POST方式需要使用setEntity(HttpEntity entity)方法來設定請求引數。

3、呼叫HttpClient物件的execute(HttpUriRequest request)傳送請求,執行該方法後,將獲得伺服器返回的HttpResponse物件。伺服器發還給我們的資料就在這個HttpResponse相應當中。呼叫HttpResponse的對應方法獲取伺服器的響應頭、響應內容等。

4、檢查相應狀態是否正常。伺服器發給客戶端的相應,有一個相應碼:相應碼為200,正常;相應碼為404,客戶端錯誤;相應碼為505,伺服器端錯誤。

5、獲得相應物件當中的資料

4、DefaultHttpClient:

GET方式

佈局檔案,activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Send Request" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/TextView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    </ScrollView>

</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

佈局檔案中,我們用一個ScrollView來包裹TextView。藉助ScrollView控制元件的話,就可以允許我們一滾動的形式檢視螢幕外i的那部分內容。

MainActivity.java的程式碼如下:

package com.example.m04_http01;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    public static final int SHOW_RESPONSE = 0;

    private Button button_sendRequest;
    private TextView textView_response;

    //新建Handler的物件,在這裡接收Message,然後更新TextView控制元件的內容
    private Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case SHOW_RESPONSE:
                String response = (String) msg.obj;
                textView_response.setText(response);
                break;

            default:
                break;
            }            
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView_response = (TextView)findViewById(R.id.TextView1);
        button_sendRequest = (Button)findViewById(R.id.button1);

        button_sendRequest.setOnClickListener(new OnClickListener() {

            //點選按鈕時,執行sendRequestWithHttpClient()方法裡面的執行緒
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sendRequestWithHttpClient();
            }
        });
    }

    //方法:傳送網路請求,獲取百度首頁的資料。在裡面開啟執行緒
    private void sendRequestWithHttpClient() {
        new Thread(new Runnable() {

            @Override
            public void run() {
                //用HttpClient傳送請求,分為五步
                //第一步:建立HttpClient物件
                HttpClient httpCient = new DefaultHttpClient();
                //第二步:建立代表請求的物件,引數是訪問的伺服器地址
                HttpGet httpGet = new HttpGet("http://www.baidu.com");

                try {
                    //第三步:執行請求,獲取伺服器發還的相應物件
                    HttpResponse httpResponse = httpCient.execute(httpGet);
                    //第四步:檢查相應的狀態是否正常:檢查狀態碼的值是200表示正常
                    if (httpResponse.getStatusLine().getStatusCode() == 200) {
                        //第五步:從相應物件當中取出資料,放到entity當中
                        HttpEntity entity = httpResponse.getEntity();
                        String response = EntityUtils.toString(entity,"utf-8");//將entity當中的資料轉換為字串

                        //在子執行緒中將Message物件發出去
                        Message message = new Message();
                        message.what = SHOW_RESPONSE;
                        message.obj = response.toString();
                        handler.sendMessage(message);
                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }).start();//這個start()方法不要忘記了        

    }    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99

最後要記得在清單檔案中宣告訪問網路的許可權:

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="16" />

<uses-permission android:name="android.permission.INTERNET"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

這裡寫圖片描述

POST方式

POST提交資料的步驟:

  1. 構造請求物件;
  2. 將需要傳遞給伺服器端的資料放置在鍵值對物件當中;
  3. 將準備好的鍵值對放置在List當中;
  4. 生成代表請求體的物件;
  5. 將存有請求鍵值對的List物件放置在請求題物件當中;
  6. 將請求體物件放置到請求物件當中;
  7. 傳送請求物件 
    後面的步驟(即處理請求物件)和GET方法是一致的。
package com.example.m04_http02;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private EditText nameText;
    private EditText pwdText;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        nameText = (EditText) findViewById(R.id.nameText);
        pwdText = (EditText) findViewById(R.id.pwdText);
        button = (Button) findViewById(R.id.button1);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // 使用者輸入使用者名稱密碼, 然後通過Get方法傳送給本地伺服器
                String name = nameText.getText().toString();
                String pwd = pwdText.getText().toString();

                // 使用GET方法向本地伺服器傳送資料
                //GetThread getThread = new GetThread(name, pwd);
                //getThread.start();                

                //使用POST方法向伺服器傳送資料
                PostThread postThread = new PostThread(name, pwd);
                postThread.start();
            }
        });
    }


    //子執行緒:通過GET方法向伺服器傳送使用者名稱、密碼的資訊
    class GetThread extends Thread {

        String name;
        String pwd;

        public GetThread(String name, String pwd) {
            this.name = name;
            this.pwd = pwd;
        }

        @Override
        public void run() {
            //用HttpClient傳送請求,分為五步
            //第一步:建立HttpClient物件
            HttpClient httpClient = new DefaultHttpClient();
            //注意,下面這一行中,我之前把連結中的"test"誤寫成了"text",導致調BUG調了半天沒弄出來,真是浪費時間啊
            String url = "http://192.168.1.112:8080/test.jsp?name=" + name+ "&password=" + pwd;
            //第二步:建立代表請求的物件,引數是訪問的伺服器地址
            HttpGet httpGet = new HttpGet(url);
            try {
                //第三步:執行請求,獲取伺服器發還的相應物件
                HttpResponse response = httpClient.execute(httpGet);
                //第四步:檢查相應的狀態是否正常:檢查狀態碼的值是200表示正常
                if (response.getStatusLine().getStatusCode() == 200) {
                    //第五步:從相應物件當中取出資料,放到entity當中
                    HttpEntity entity = response.getEntity();
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(entity.getContent()));
                    String result = reader.readLine();
                    Log.d("HTTP", "GET:" + result);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }    

    //子執行緒:使用POST方法向伺服器傳送使用者名稱、密碼等資料
    class PostThread extends Thread {

        String name;
        String pwd;

        public PostThread(String name, String pwd) {
            this.name = name;
            this.pwd = pwd;
        }

        @Override
        public void run() {
            HttpClient httpClient = new DefaultHttpClient();
            String url = "http://192.168.1.112:8080/test.jsp";
            //第二步:生成使用POST方法的請求物件
            HttpPost httpPost = new HttpPost(url);
            //NameValuePair物件代表了一個需要發往伺服器的鍵值對
            NameValuePair pair1 = new BasicNameValuePair("name", name);
            NameValuePair pair2 = new BasicNameValuePair("password", pwd);
            //將準備好的鍵值對物件放置在一個List當中
            ArrayList<NameValuePair> pairs = new ArrayList<NameValuePair>();
            pairs.add(pair1);
            pairs.add(pair2);
            try {
                //建立代表請求體的物件(注意,是請求體)
                HttpEntity requestEntity = new UrlEncodedFormEntity(pairs);
                //將請求體放置在請求物件當中
                httpPost.setEntity(requestEntity);
                //執行請求物件
                try {
                    //第三步:執行請求物件,獲取伺服器發還的相應物件
                    HttpResponse response = httpClient.execute(httpPost);
                    //第四步:檢查相應的狀態是否正常:檢查狀態碼的值是200表示正常
                    if (response.getStatusLine().getStatusCode() == 200) {
                        //第五步:從相應物件當中取出資料,放到entity當中
                        HttpEntity entity = response.getEntity();
                        BufferedReader reader = new BufferedReader(
                                new InputStreamReader(entity.getContent()));
                        String result = reader.readLine();
                        Log.d("HTTP", "POST:" + result);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151

這裡寫圖片描述

5、Java中使用HTTP——HttpURLConnection

HttpURLConnection繼承了URLConnection,所以在URLConnection的基礎上進一步改進,增加了一些用於操作HTTP資源的便捷方法。Java中HttpURLConnection物件通過URL.openConnection()方法來獲得,需要進行強制轉換。先來介紹幾個HttpURLConnection的常用方法:

  • void setConnectTimeout(int timeout):設定連線超時時長,如果超過timeout時長,則放棄連線,單位以毫秒計算。

  • void setDoInput(boolean newValue) :標誌是否允許輸入。

  • void setDoOutput(boolean newValue):標誌是否允許輸出。

  • String getRequestMethod():獲取傳送請求的方法。

  • int getResponseCode():獲取伺服器的響應碼。

  • void setRequestMethod(String method):設定傳送請求的方法。

  • void setRequestProperty(String field,String newValue):設定請求報文頭,並且只對當前HttpURLConnection有效。

GET方式

這個例子通過GET方式從服務端獲取一張圖片的資訊,並把其儲存在本地磁碟中。伺服器為本機上的IIS,一張靜態圖片,直接通過URL訪問。

package com.http.get;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class HttpUtils {
    private static String URL_PATH = "http://192.168.1.106:8080/green.jpg";
    /**
     * @param args
     */
    public static void main(String[] args) {
        // 呼叫方法獲取圖片並儲存
        saveImageToDisk();
    }
    /**
     * 通過URL_PATH的地址訪問圖片並儲存到本地
     */
    public static void saveImageToDisk()
    {
        InputStream inputStream= getInputStream();
        byte[] data=new byte[1024];
        int len=0;
        FileOutputStream fileOutputStream=null;
        try {
            //把圖片檔案儲存在本地F盤下
            fileOutputStream=new FileOutputStream("F:\\test.png");
            while((len=inputStream.read(data))!=-1) 
            {
                //向本地檔案中寫入圖片流
                fileOutputStream.write(data,0,len);                
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally
        {
            //最後關閉流
            if(inputStream!=null)
            {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fileOutputStream!=null)
            {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * 通過URL獲取圖片
     * @return URL地址圖片的輸入流。
     */
    public static InputStream getInputStream() {
        InputStream inputStream = null;
        HttpURLConnection httpURLConnection = null;

        try {
            //根據URL地址例項化一個URL物件,用於建立HttpURLConnection物件。
            URL url = new URL(URL_PATH);

            if (url != null) {
                //openConnection獲得當前URL的連線
                httpURLConnection = (HttpURLConnection) url.openConnection();
                //設定3秒的響應超時
                httpURLConnection.setConnectTimeout(3000);
                //設定允許輸入
                httpURLConnection.setDoInput(true);
                //設定為GET方式請求資料
                httpURLConnection.setRequestMethod("GET");
                //獲取連線響應碼,200為成功,如果為其他,均表示有問題
                int responseCode=httpURLConnection.getResponseCode();
                if(responseCode==200)
                {
                    //getInputStream獲取服務端返回的資料流。
                    inputStream=httpURLConnection.getInputStream();
                }
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return inputStream;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 相關推薦

    HTTP基礎Android——使用HttpClientHttpURLConnection

    1、客戶端連線伺服器實現內部的原理: 分析上圖,步驟如下: 第一步:在瀏覽器客戶端中得到使用者輸入的內容。 第二步:瀏覽器得到這個網址之後,內部會將這個域名傳送到DNS上,進行域名解析。得到它的IP之後就會連結到指定的伺服器上,假如伺服器的地址是:221.104.13.32:80,從瀏覽器

    AndroidHttpClient HttpResponse 小結

    三步曲:  1.建立HttpGet或者HttpPost物件,將要請求的URL物件構造方法傳入HttpGet、HttpPost物件  2.通過HttpClent介面的實現類DefaultClent.的excute(HttpUriRequest request)而我們已經知道

    HTTP基礎Android——HTTP請求頭響應頭

    一、HTTP頭資訊解讀: HTTP的頭域包括通用頭、請求頭、響應頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成(說白了就是鍵值對)。 通用頭:是客戶端和伺服器都可以使用的頭部,可以在客戶端、伺服器和其他應用程式之間提供一些非

    網站優化的藝術科學工具基礎知識

      最近在閱讀一本網站優化的書,名叫《深入理解網站優化:提升網站轉化率的藝術與科學》,本書是對網站優化的4個學科(Web分析、網站易用性、線上營銷和網站測試)的最佳實踐。網站優化是一門新穎的藝術,結合前面這四門學科完成對網站的測試和分析,更好地吸引和轉化訪問者。   實施本書中的最佳實踐和測試思路,就能以

    Redis 設計實現RDB AOF 兩種持久化模式詳解

    在執行情況下, Redis 以資料結構的形式將資料維持在記憶體中, 為了讓這些資料在 Redis 重啟之後仍然可用, Redis 分別提供了 RDB 和 AOF 兩種持久化模式。 在 Redis 執行時, RDB 程式將當前記憶體中的資料庫快照儲存到磁碟檔案中, 在 Red

    HttpClientHttpURLConnection的使用區別

    https://www.cnblogs.com/liushuibufu/p/4140913.html   功能用法對比 從功能上對比,HttpURLConnection比HttpClient庫要豐富很多,提供了很多工具,封裝了http的請求頭,引數,內容體,響應,還有一

    HttpClientHttpURLConnection的區別案例

    HttpURLConnection 物件 1. HttpURLConnection物件需要通過URL類中的openConnection()方法來獲得,它無法直接構造。 HttpsURLConnection urlconn = null; URL url = new UR

    資料結構演算法 佇列廣度優先搜尋(BFS)

     佇列和 BFS 廣度優先搜尋(BFS)的一個常見應用是找出從根結點到目標結點的最短路徑。在本文中,我們提供了一個示例來解釋在 BFS 演算法中是如何逐步應用佇列的。 洞悉 1. 結點的處理順序是什麼? 在第一輪中,我們處理根結點。在第二輪中,我們處理根結點旁

    進階光照材質光照反射模型

    第五章講述了一些漫反射模型和鏡面反射模型的原理和數學公式 博主在unity中實現了一下,把部分結果貼在上面 有下面幾個主題: 渲染公式 基本光照定義 光照和lambert法則 雙向反射分佈函式BRDF 漫反射材質原理簡介與模型 鏡面反射材質原理簡介與模型 基本光照定義 對於

    Androiddrawablemipmap目錄區別

    在android studio中我們建立專案後,在資源res檔案中有drawable和mipmap兩種存放圖片的資料夾,在使用哪一個資料夾來存放圖片,一直都很有爭議: android 在 API level 17 加入了 mipmap 技術,對 bitmap 圖片的渲染支援 mipmap 技術,

    HTTP伺服器android客戶端的json互動

    廢話就不多說了,直接上程式碼: 伺服器端: ①MySQL中建立一個數據庫hello,建一張表tab_user,新增欄位id,username,password。然後隨便新增幾條記錄。 ②新建Java Web工程HelloServer。 ③在WEB-INF目錄下的lib

    androidlayout_toLeftOflayout_toRightOf出現的錯誤

    錯誤是這樣的,佈局檔案如下,總是在SeekBar裡面的這一句android:layout_toLeftOf="@id/voice_max"報錯,差點氣得我吐血,明明沒有錯誤的. <ImageView android:id="@+id/voice_

    HttpClientHttpURLConnection整合彙總對比

    總結了網上的一些資源,主要有以下兩個觀點: 分析一:             在研究Volley框架的原始碼中,發現它在HTTP請求的使用上比較有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。我也比較

    android中URLConnectionHttpURLConnection

    HttpURLConnection 適用於HTTP(RFC 2616)的URLConnection,用於在網路上傳送和接受資料。這個類可以用來發送或者接受那些事先不知道長度的流式資料。 可以採用如下方式使用這個類: 1.通過呼叫URL.openConnection()方法,再執行強制型別轉換獲取Htt

    AndroidToolBar自定義ToolBar實現沉浸式狀態列

    沉浸式狀態列確切的說應該叫做透明狀態列。一般情況下,狀態列的底色都為黑色,而沉浸式狀態列則是把狀態列設定為透明或者半透明。 沉浸式狀態列是從android Kitkat(Android 4.4)開始出

    HttpClient HttpURLConnection 共用session

    最近又開始折騰android專案了,專案中需要請求伺服器段的介面,又要涉及到圖片的資源,比較糾結的是,我開始著手這個專案的時候,網路請求的框架已經完成了,現在存在一個問題就是,請求介面的使用的是HttpClient,這個是已經封裝好了,不方便修改的,但是圖片下載,如果這套

    AndroidObserverObservable

    package java.util; public class Observable { private boolean changed = false; private final ArrayList<Observer> observers; public Observable(

    Androidabstractinterface介紹

    abstract , interface // 抽象類abstractclassAbc{// 抽象類中的抽象方法publicabstractvoid setData(int i);publicvoidPrint(){// 呼叫了抽象方法 setData(1

    一起學AndroidToggleButtonSwitch

    本文以一個簡單的小例子,簡述在Android開發中ToggleButton(開關按鈕)和Switch(開關)的簡單使用,僅供學習分享使用。 概述 ToggleButton是一個有兩種狀態(checked/unchecked)的按鈕,經常用於開/關等場景中,預設文字顯示(ON/OFF),Switch 是一個

    Androidverticalhorizontal的區別

    當 android:orientation=”vertical” 時, 只有水平方向的設定才起作用,垂直方向的設定不起作用。即:left,right,center_horizontal 是生效的。當 android:orientation=”horizontal” 時, 只