今天要介紹的是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" />
用來設定連線基底。
public class ApiClient{
OkHttpClient client=new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//連接超時
.readTimeout(10, TimeUnit.SECONDS)//讀取超時
.writeTimeout(10, TimeUnit.SECONDS)//寫超時
.build();
}
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來抓取資料。
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));
}
});
}
}
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();