OKHttp (1) 기본 사용

5518 단어 okhttpandroid자바
OkHttp (1)
프로필
OkHttp 는 현재 비교적 뛰어난 네트워크 통신 라 이브 러 리 로 원생 의 HTTPURLConnection 을 대체 할 수 있 고 Http / SPDY 를 지원 하 며 간단 하고 사용 하기 쉬 우 며 확장 성 이 좋다 는 등 장점 이 있다.
2 HttpURLConnection
OkHttp 를 사용 하지 않 고 네트워크 요청 을 어떻게 실현 하 는 지 살 펴 보 자.
프레임 워 크 를 사용 하지 않 기 전에 저 희 는 기본적으로 원본 HttpClient (도 태 됨) 와 HttpURLConnection 을 사용 하여 HTTP 요청 을 보 냅 니 다.
HttpURLConnection 은 다 용도, 경량급 HTTP 클 라 이언 트 입 니 다. 대부분의 응용 프로그램 은 이 를 사용 하여 HTTP 작업 을 할 수 있 습 니 다.다음은 Get 방법의 Http 요청 을 간단하게 사용 합 니 다.
아래 의 조작 은 모두 하위 라인 에서 진행 되 는 것 을 주의 하 시 오
  • (1) HttpURLConnection 의 인 스 턴 스 가 져 오기
  • //  URL     HttpURLConnection
        URL murl = new URL("https://www.baidu.com");
        HttpURLConnection connection = (HttpURLConnection)murl.openConnection;
    //     (    ,    ,    ,header 
        connection.setConnectionTimeout(8888);
        connection.setRequestMethod("GET");
        ...
    // POST              
  • (2) 연결 하여 입력 흐름 을 가 져 오고 처리
  •     connection.connect();
        mInputSteam = connection.getInputSteam();
        //   
        int code = mHttpURLConnection.getResponseCode();
        String respose = converStreamToString(mInputStream);
        Log.i("baidu", "     :" + code + "
    :
    " + respose);` // , mInputSteam.close();
  • (3) 연결 닫 기
  •     connection.disconnect();

    이상 은 HttpURLConnection 의 기본 동작 입 니 다.
    3 OkHttp 의 사용
    3.1 요청 받 기
        //         
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                        .get()
                        .url("https://www.4399.com")
                        .build();
        Call call = client.newCall(request);    
    try {
        //1.          call.execute(),          (            )          Response
        Response response = call.execute();
        //2.          call.enqueue(Callback callback),         Callback         
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.w("cozing", "    ");
            }
    
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //        Response
                Log.w("cozing", "    ");
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }  

    3.2 포스트 요청
        OkHttpClient client = new OkHttpClient();
        //           
        FormBody formBody = new FormBody.Builder()
                    .add("username", "admin")
                    .add("password", "admin")
                    .build();
        Request request = new Request.Builder()
                        .post(formBody)
                        .url("https://www.4399.com")
                        .build();
        Call call = client.newCall(request);    
    try {
        Response response = call.execute();
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.w("cozing", "    ");
            }
    
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //        Response
                Log.w("cozing", "    ");
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }  

    이상 은 바로 OkHttp 의 기본 적 인 사용 입 니 다. 네트워크 요청 기능 을 봉인 하여 전체적인 코드 를 더욱 간결 하고 명료 하 게 만 들 었 음 을 알 수 있 습 니 다.
    4 OkHttp 의 기본 클래스 (인터페이스) 소개
    위의 코드 에서 OkHttpClient, Call, Request 등 몇 가지 종류 가 나 왔 습 니 다. 이러한 노출 된 종 류 는 우리 의 사용 과 관련 되 기 때문에 다음 에 이런 종 류 를 보 여 줍 니 다.
    OkHttpClient
    OkHttp 의 사용 은 이러한 구축 에서 시작 되 었 습 니 다. Client 는 클 라 이언 트 의 뜻 이기 때문에 개인 적 으로 이런 유형의 본질은 OkHttp 를 사용 하 는 클 라 이언 트 에 대해 전문 적 인 맞 춤 형 제작 을 하 는 것 이 라 고 생각 합 니 다.
    예 를 들다
    new OkhttpClient.Builder()
            .addInterceptor(loggingIntecepter)
            .retryOnConnectionFailure(true)
            .connectionTimeout(TIME_OUT, TimeUnit.SECONDS)
            .readTimeout(TIME_OUT, TimeUnit.SECONDS)
            .build();

    OkHttpClient 의 구축 은 건설 자 모델 을 이용 했다. 이 모델 은 복잡 한 대상 의 구축 에 자주 사용 되 고 구축 한 세부 사항 을 봉인 하 며 구체 적 인 설명 은 나중에 하 자.
    이 대상 의 구축 에서 차단기 추가 와 연결 재 시도 등 을 보 았 습 니 다. 원본 코드 에서 OkHttpClient 속성 을 살 펴 보면 대부분의 차단기 와 관련 된 설정 이 이 대상 에 설정 되 어 있 음 을 알 수 있 습 니 다.
    Request
    영어 번역문 에서 알 수 있 듯 이 이것 은 요청 과 관련 된 클래스 로 요청 URL 등 속성 을 포함한다.우 리 는 우리 가 방문 한 종 류 를 정의 하기 위해 서 이런 종류 가 필요 하 다.
    예 를 들다
    Request request = new Request.BUilder()
        .url(url)
        .build();

    상기 예 에서 도 작성 자 모드 를 사 용 했 습 니 다. 그 중에서 하나의 url 속성 만 사 용 했 습 니 다. 그 밖 에 이 method (GET 와 POST 등), headers (요청 헤드), requestBody (요청 체) 와 tag 도 있 습 니 다.
    Call
    이 인 터 페 이 스 는 실제 요청 네트워크 의 인터페이스 로 현 류 는 RealCall 입 니 다. 그 구축 방식 은 간단 한 공장 모델 (하나의 매개 변 수 를 입력 하고 이 매개 변수 에 대응 하 는 대상 을 되 돌려 줍 니 다) 의 소스 코드 는 다음 과 같 습 니 다.
    interface Factory {
        Call newCall(Request request);
      }
      ...
       @Override
        public Call newCall(Request request) {
            return RealCall.newRealCall(this, request, false /* for web socket */);
        }

    구축 방식 은 위 에서 유도 할 수 있다.
    client. newCall (request) / / 이전 두 가지 종 류 를 사 용 했 습 니 다.
    이 인터페이스 와 그 실현 류 는 OkHttp 의 핵심 내용 으로 탐구 할 만 한 것 이 많 으 며 다음 절 에 이 글 을 자세히 분석 할 필요 가 있다.
    작은 매듭
    이 글 에서 우 리 는 먼저 HttpURLConnection 을 이용 하여 네트워크 요청 을 하 는 방법 을 간략하게 소개 한 다음 에 OkHttp 의 간단 한 사용 과 사용 과정 에서 어떤 종 류 를 만 나 는 지 소개 했다.
    우 리 는 OkHttp 에 대해 작은 입문 을 한 셈 이다. 다음 절 은 OkHttp 의 실행 절 차 를 깊이 있 게 해석 하기 시작한다.

    좋은 웹페이지 즐겨찾기