Android Studio OkHttpClient使用


本次來記錄下OkHttpClient的使用,OkHttpClient是用來完成android 客戶端對服務端請求的工具。

首先記住,使用網絡的時候一定要加入權限,加入到AndroidMainfest.xml中

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

 

在初次使用的時候會出現報錯。cannot resolve symbol OkHttpClient

這里需要引入

    implementation 'com.squareup.okhttp3:okhttp:3.0.1'

然后刷新下項目就可以了。

代碼:

package com.example.administrator.testclient;


import com.squareup.*;

import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public  class BaseHttpClient {

    public static final MediaType MEDIA_TYPE_MARKDOWN
            = MediaType.parse("text/x-markdown; charset=utf-8");
    // 01. 定義okhttp
    private  final  OkHttpClient client  = new OkHttpClient();

    public BaseHttpClient(){

        //client.connectTimeoutMillis();
    }


    /**
     * 發送一個表單請求
     * @throws Exception
     */
    public void SendForm() throws Exception {
        RequestBody formBody = new FormBody.Builder()
                .add("search", "Jurassic Park")
                .build();
        Request request = new Request.Builder()
                .url("https://en.wikipedia.org/w/index.php")
                .post(formBody)
                .build();

        Response response = client.newCall(request).execute();
        if (!response.isSuccessful())
            throw new IOException("Unexpected code " + response);

        System.out.println(response.body().string());
    }

    /**POST 請求
     * 發送一個string請求
     * @throws Exception
     */
    public void SendPostString() throws Exception {
        String postBody = ""
                + "Releases\n"
                + "--------\n"
                + "\n"
                + " * _1.0_ May 6, 2013\n"
                + " * _1.1_ June 15, 2013\n"
                + " * _1.2_ August 11, 2013\n";

        Request request = new Request.Builder()
                .url("https://api.github.com/markdown/raw")
                .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
                .build();

        Response response = client.newCall(request).execute();
        if (!response.isSuccessful())
            throw new IOException("Unexpected code " + response);

        System.out.println(response.body().string());
    }

    /**POST 請求
     * 發送一個From請求
     * @throws Exception
     */
    public   void SendPostFrom() throws Exception {

        RequestBody body = new FormBody.Builder()
                .add("name", "sy")//添加參數體
                .add("age", "18")
                .build();

        Request request = new Request.Builder()
                .post(body) //請求參數
                .url("http://123.207.70.54:8080/SpringMvc/hello")
                .build();

        Response response = client.newCall(request).execute();
        if (!response.isSuccessful())
            throw new IOException("Unexpected code " + response);
    }

    /**Get請求
     * 發送一個From請求
     * @throws Exception
     */
    public void SendGetFrom() throws Exception {

        Request request = new Request.Builder()
                .get() //請求參數
                .url("http://123.207.70.54:8080/SpringMvc/hello")
                .build();

        Response response = client.newCall(request).execute();
        if (!response.isSuccessful())
            throw new IOException("Unexpected code " + response);
    }

}

 測試發現,上面的用不了,下面放一個測試通過的方法:

    public void getDatasyncFactory(){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            OkHttpClient client = new OkHttpClient();//創建OkHttpClient對象
                            Request request = new Request.Builder()
                                    .url("http://123.207.70.54:8080/SpringMvc/hello")//請求接口。如果需要傳參拼接到接口后面。
                                    .build();//創建Request 對象
                            Response response = null;
                            response = client.newCall(request).execute();//得到Response 對象
                            if (response.isSuccessful()) {
                                Log.d("kwwl","response.code()=="+response.code());
                                Log.d("kwwl","response.message()=="+response.message());
                                Log.d("kwwl","res=="+response.body());
                                //此時的代碼執行在子線程,修改UI的操作請使用handler跳轉到UI線程。
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }

返回信息:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM