iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Mobile Development

Android studio 30天初學筆記系列 第 18

[Android Studio 30天挑戰] Day018- 介紹okhttp

  • 分享至 

  • xImage
  •  

今天要介紹的是OkHttp,這跟我們昨天使用的Retrofit一樣都能做網絡連線的請求,並拿取資料,並且這兩個套件可以合併,接下來就來看程式碼吧!!!!

依賴

一樣的請到build.grade(Module: app)的dependencies加入依賴。

dependencies{
    //----------------監視 API 與 APP 之間的傳輸狀態----------------
    implementation "com.squareup.okhttp3:logging-interceptor:4.9.1"
    implementation 'com.squareup.okhttp3:okhttp-urlconnection:4.9.0'
    //-------------------------------------------------------------
    implementation 'com.squareup.okhttp3:okhttp:4.7.2'
}

網路權限

在AndroidManifet加入網路權限:

<uses-permission android:name="android.permission.INTERNET" />

OkHttpClient

用來設定連線基底。

public class ApiClient{
    OkHttpClient client=new OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)//連接超時
            .readTimeout(10, TimeUnit.SECONDS)//讀取超時
            .writeTimeout(10, TimeUnit.SECONDS)//寫超時
            .build();
}

Request & Call

Requser :設定 URL 連線網址、請求方式。
Call :設定execute或enqueue,執行連線後,可獲取到回應的結果資料。

    Request request =new Request.Builder()
            .url("https://jsonplaceholder.typicode.com/posts/1")//要求連到指定網址
            .build();
    //宣告 Call
    Call call=client.newCall(request);

MainActivity

我們回到MainActivity來抓取資料。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //New出實例。
        ApiClient apiClient=new ApiClient();
        //執行 Call 連線後,採用enqueue獲取到回應的結果資料。
        apiClient.call.enqueue(new Callback() {
            // 連線成功
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws 
            IOException {
                Log.d("note",response.body().toString());
            }
            // 連線失敗
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Log.d("note",String.valueOf(e));
            }
        });
    }
}

與Retrofit合併

OKHttp還提供的一個功能叫攔截器。
比如說你需要 Log 那麼就可以透過攔截器來串接所需的部分,那麼就可以透過 Logging Interceptor 這個第三方來幫忙處理。

OkHttpClient okHttpClient =new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .build();

        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)//把設定好的okHttpClient放入
                .build();

上一篇
[Android Studio 30天挑戰] Day17 - 介紹Retrofit
下一篇
[Android Studio 30天挑戰] Day19 - 介紹RxJava2(上)
系列文
Android studio 30天初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言