214. (AndroidStudio/android/java) okhttp 사용해 동기 , 비동기 get...

214. (AndroidStudio/android/java) okhttp 사용해 동기 , 비동기 get...

728x90

반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java

[소스 코드]

/** ========= [필요한 퍼미션 및 라이브러리] ========= **/ //TODO [퍼미션] /** * * * */ //TODO [라이브러리] /** * allprojects > repositories > mavenCentral() 추가 * implementation("com.squareup.okhttp3:okhttp:4.9.0") * */ ​ ​ ​ /** ========= [GET 방식 동기 HTTP 요청 - 쿼리 파라미터 전송] ========= **/ public class RequestSyncGetHttp extends Thread { private boolean responseFlag = false; // [http 요청 성공 및 실패 플래그값] private String responseMsg = ""; // [http 요청 후 응답 받은 데이터 저장] public void run() { // TODO [동기 요청 사용 방법 예시] /** RequestSyncGetHttp requestSyncGetHttp = new RequestSyncGetHttp(); requestSyncGetHttp.start(); try{ requestSyncGetHttp.join(); // [스레드 작업 완료까지 대기] }catch(Exception e){ e.printStackTrace(); } Log.d("---","---"); Log.d("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 확인]"); Log.d("","

"+"["+"플래그 값 : " + String.valueOf(requestSyncGetHttp.getResult())+"]"); Log.d("","

"+"["+"응답 메시지 : " + String.valueOf(requestSyncGetHttp.getResponse())+"]"); Log.d("//===========//","================================================"); Log.d("---","---"); */ try { //TODO [전송 url 정의 실시] String url = "https://jsonplaceholder.typicode.com/posts"; //TODO [파라미터값 선언 실시] Map params = new HashMap(); params.put("userId",1); params.put("id",1); //TODO [url에 파라미터 추가 실시] HttpUrl.Builder httpBuilder = HttpUrl.get(url).newBuilder(); Set set = params.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()){ String key = (String) iterator.next(); httpBuilder.addQueryParameter(key, String.valueOf(params.get(key))); //TODO [쿼리 파람 추가] } //TODO [OK HTTP 객체 선언 실시] final OkHttpClient client = new OkHttpClient(); final Request.Builder request = new Request.Builder(); request.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;"); //TODO [헤더] request.url(httpBuilder.build()); //TODO [httpBuilder 추가] Log.d("---","---"); Log.d("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 실시]"); Log.d("","

"+"["+"요청 주소 : " + String.valueOf(url)+"]"); Log.d("","

"+"["+"전송 값 : " + String.valueOf(params.toString())+"]"); Log.d("","

"+"["+"전송 형태 : " + String.valueOf(httpBuilder.build())+"]"); Log.d("//===========//","================================================"); Log.d("---","---"); //TODO [동기 처리 (execute 사용)] Response response = client.newCall(request.build()).execute(); if (response.isSuccessful()) { //TODO [요청이 성공한 경우] final String responseCode = String.valueOf(response.toString()); final String responseData = response.body().string(); Log.d("---", "---"); Log.w("//===========//", "================================================"); Log.d("", "

" + "[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 성공]"); Log.d("", "

" + "[" + "응답 코드 : " + String.valueOf(responseCode) + "]"); Log.d("", "

" + "[" + "응답 값 : " + String.valueOf(responseData) + "]"); Log.w("//===========//", "================================================"); Log.d("---", "---"); responseFlag = true; // 플래그값 저장 responseMsg = responseData; // 응답값 저장 } else { //TODO [요청이 실패한 경우] final String responseCode = String.valueOf(response.toString()); final String responseData = response.body().string(); Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 실패]"); Log.d("","

"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(responseData)+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); responseFlag = false; // 플래그값 저장 responseMsg = responseData; // 에러값 저장 } } catch (final Exception e){ Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 실패 - CATCH]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(e.getMessage())+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); responseFlag = true; // 플래그값 저장 responseMsg = String.valueOf("CATCH : " + e.getMessage()); // 에러값 저장 } } //TODO [http 요청 성공 및 실패 결과값 리턴해주는 함수] public boolean getResult(){ return this.responseFlag; } //TODO [http 요청 응답값을 리턴해주는 함수] public String getResponse(){ return this.responseMsg; } } ​ ​ ​ /** ========= [GET 방식 비동기 HTTP 요청 - 쿼리 파라미터 전송] ========= **/ public void requestAsyncGetHttp(){ try { //TODO [전송 url 정의 실시] String url = "https://jsonplaceholder.typicode.com/posts"; //TODO [파라미터값 선언 실시] Map params = new HashMap(); params.put("userId",1); params.put("id",1); //TODO [url에 파라미터 추가 실시] HttpUrl.Builder httpBuilder = HttpUrl.get(url).newBuilder(); Set set = params.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()){ String key = (String) iterator.next(); httpBuilder.addQueryParameter(key, String.valueOf(params.get(key))); //TODO [쿼리 파람 추가] } //TODO [OK HTTP 객체 선언 실시] OkHttpClient client = new OkHttpClient(); Request.Builder request = new Request.Builder(); request.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;"); //TODO [헤더] request.url(httpBuilder.build()); //TODO [httpBuilder 추가] Log.d("---","---"); Log.d("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 실시]"); Log.d("","

"+"["+"요청 주소 : " + String.valueOf(url)+"]"); Log.d("","

"+"["+"전송 값 : " + String.valueOf(params.toString())+"]"); Log.d("","

"+"["+"전송 형태 : " + String.valueOf(httpBuilder.build())+"]"); Log.d("//===========//","================================================"); Log.d("---","---"); //TODO [비동기 처리 (enqueue 사용)] client.newCall(request.build()).enqueue(new Callback() { //TODO [성공한 경우] @Override public void onResponse(Call call, Response response) throws IOException { final String responseCode = String.valueOf(response.toString()); final String responseData = response.body().string(); runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.w("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 성공]"); Log.d("","

"+"["+"응답 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"응답 값 : " + String.valueOf(responseData)+"]"); Log.w("//===========//","================================================"); Log.d("---","---"); } }); } //TODO [실패한 경우] @Override public void onFailure(Call call, IOException e) { final String responseCode = String.valueOf(e.toString()); final String responseData = String.valueOf(e.getMessage()); runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 실패]"); Log.d("","

"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(responseData)+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); } }); } }); } catch (final Exception e){ runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 실패 - CATCH]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(e.getMessage())+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); } }); e.printStackTrace(); } } ​ ​ ​ /** ========= [POST 방식 비동기 HTTP 요청 - 쿼리 파라미터 전송] ========= **/ public void requestAsyncPostHttp(){ try { //TODO [전송 url 정의 실시] String url = "https://jsonplaceholder.typicode.com/posts"; //TODO [파라미터값 선언 실시] Map params = new HashMap(); params.put("userId",1); params.put("id",1); //TODO [url에 파라미터 추가 실시] HttpUrl.Builder httpBuilder = HttpUrl.get(url).newBuilder(); Set set = params.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()){ String key = (String) iterator.next(); httpBuilder.addQueryParameter(key, String.valueOf(params.get(key))); //TODO [쿼리 파람 추가] } //TODO [OK HTTP 객체 선언 실시] OkHttpClient client = new OkHttpClient(); Request.Builder request = new Request.Builder(); request.addHeader("Content-Type", "application/json; charset=utf-8;"); //TODO [헤더] request.post(new FormBody.Builder().build()); request.url(httpBuilder.build()); //TODO [httpBuilder 추가] Log.d("---","---"); Log.d("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 실시]"); Log.d("","

"+"["+"요청 주소 : " + String.valueOf(url)+"]"); Log.d("","

"+"["+"전송 값 : " + String.valueOf(params.toString())+"]"); Log.d("","

"+"["+"전송 형태 : " + String.valueOf(httpBuilder.build())+"]"); Log.d("//===========//","================================================"); Log.d("---","---"); //TODO [비동기 처리 (enqueue 사용)] client.newCall(request.build()).enqueue(new Callback() { //TODO [성공한 경우] @Override public void onResponse(Call call, Response response) throws IOException { final String responseCode = String.valueOf(response.toString()); final String responseData = response.body().string(); runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.w("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 성공]"); Log.d("","

"+"["+"응답 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"응답 값 : " + String.valueOf(responseData)+"]"); Log.w("//===========//","================================================"); Log.d("---","---"); } }); } //TODO [실패한 경우] @Override public void onFailure(Call call, IOException e) { final String responseCode = String.valueOf(e.toString()); final String responseData = String.valueOf(e.getMessage()); runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 실패]"); Log.d("","

"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(responseData)+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); } }); } }); } catch (final Exception e){ runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 실패 - CATCH]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(e.getMessage())+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); } }); e.printStackTrace(); } } ​ ​ ​ /** ========= [POST BODY JSON 방식 비동기 HTTP 요청 - JSON 데이터 전송] ========= **/ public void requestAsyncPostBodyJsonHttp(){ try { //TODO [전송 url 정의 실시] String url = "https://jsonplaceholder.typicode.com/posts"; //TODO [파라미터값 선언 실시] Map params = new HashMap(); params.put("userId",1); params.put("id",1); //TODO [BODY에 파라미터 추가 실시] FormBody.Builder formBuilder = new FormBody.Builder(); Set set = params.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()){ String key = (String) iterator.next(); formBuilder.add(key, String.valueOf(params.get(key))); //TODO [바디에 추가] } //TODO [OK HTTP 객체 선언 실시] OkHttpClient client = new OkHttpClient(); Request.Builder request = new Request.Builder(); request.addHeader("Content-Type", "application/json; charset=utf-8;"); //TODO [헤더] request.post(formBuilder.build()); request.url(url); //TODO [httpBuilder 추가] Log.d("---","---"); Log.d("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 실시]"); Log.d("","

"+"["+"요청 주소 : " + String.valueOf(url)+"]"); Log.d("","

"+"["+"전송 값 : " + String.valueOf(new JSONObject(params).toString())+"]"); Log.d("//===========//","================================================"); Log.d("---","---"); //TODO [비동기 처리 (enqueue 사용)] client.newCall(request.build()).enqueue(new Callback() { //TODO [성공한 경우] @Override public void onResponse(Call call, Response response) throws IOException { final String responseCode = String.valueOf(response.toString()); final String responseData = response.body().string(); runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.w("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 성공]"); Log.d("","

"+"["+"응답 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"응답 값 : " + String.valueOf(responseData)+"]"); Log.w("//===========//","================================================"); Log.d("---","---"); } }); } //TODO [실패한 경우] @Override public void onFailure(Call call, IOException e) { final String responseCode = String.valueOf(e.toString()); final String responseData = String.valueOf(e.getMessage()); runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 실패]"); Log.d("","

"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(responseData)+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); } }); } }); } catch (final Exception e){ runOnUiThread(new Runnable() { public void run() { Log.d("---","---"); Log.e("//===========//","================================================"); Log.d("","

"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 실패 - CATCH]"); Log.d("","

"+"["+"에러 값 : " + String.valueOf(e.getMessage())+"]"); Log.e("//===========//","================================================"); Log.d("---","---"); } }); e.printStackTrace(); } }

[결과 출력]

728x90

반응형

from http://kkh0977.tistory.com/1373 by ccl(A) rewrite - 2021-11-06 15:02:34