투케이2K

214. (AndroidStudio/android/java) okhttp 사용해 동기 , 비동기 get , post 요청 실시 본문

Android

214. (AndroidStudio/android/java) okhttp 사용해 동기 , 비동기 get , post 요청 실시

투케이2K 2021. 11. 6. 12:32

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java


[소스 코드]

      /** ========= [필요한 퍼미션 및 라이브러리] ========= **/
      //TODO [퍼미션]
      /**
        * <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        * <uses-permission android:name="android.permission.INTERNET"/>
        * */

      //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("","\n"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 확인]");
			Log.d("","\n"+"["+"플래그 값 : " + String.valueOf(requestSyncGetHttp.getResult())+"]");
			Log.d("","\n"+"["+"응답 메시지 : " + 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("","\n"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 실시]");
				Log.d("","\n"+"["+"요청 주소 : " + String.valueOf(url)+"]");
				Log.d("","\n"+"["+"전송 값 : " + String.valueOf(params.toString())+"]");
				Log.d("","\n"+"["+"전송 형태 : " + 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("", "\n" + "[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 성공]");
					Log.d("", "\n" + "[" + "응답 코드 : " + String.valueOf(responseCode) + "]");
					Log.d("", "\n" + "[" + "응답 값 : " + 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("","\n"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 실패]");
					Log.d("","\n"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]");
					Log.d("","\n"+"["+"에러 값 : " + String.valueOf(responseData)+"]");
					Log.e("//===========//","================================================");
					Log.d("---","---");
					responseFlag = false; // 플래그값 저장
					responseMsg = responseData; // 에러값 저장
				}
			}
			catch (final Exception e){
				Log.d("---","---");
				Log.e("//===========//","================================================");
				Log.d("","\n"+"[A_OkHttp > requestSyncGetHttp() 메소드 : OK HTTP 동기 GET 요청 실패 - CATCH]");
				Log.d("","\n"+"["+"에러 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 실시]");
			Log.d("","\n"+"["+"요청 주소 : " + String.valueOf(url)+"]");
			Log.d("","\n"+"["+"전송 값 : " + String.valueOf(params.toString())+"]");
			Log.d("","\n"+"["+"전송 형태 : " + 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("","\n"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 성공]");
							Log.d("","\n"+"["+"응답 코드 : " + String.valueOf(responseCode)+"]");
							Log.d("","\n"+"["+"응답 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 실패]");
							Log.d("","\n"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]");
							Log.d("","\n"+"["+"에러 값 : " + String.valueOf(responseData)+"]");
							Log.e("//===========//","================================================");
							Log.d("---","---");
						}
					});
				}
			});
		} catch (final Exception e){
			runOnUiThread(new Runnable() {
				public void run() {
					Log.d("---","---");
					Log.e("//===========//","================================================");
					Log.d("","\n"+"[A_OkHttp > requestAsyncGetHttp() 메소드 : OK HTTP 비동기 GET 요청 실패 - CATCH]");
					Log.d("","\n"+"["+"에러 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 실시]");
			Log.d("","\n"+"["+"요청 주소 : " + String.valueOf(url)+"]");
			Log.d("","\n"+"["+"전송 값 : " + String.valueOf(params.toString())+"]");
			Log.d("","\n"+"["+"전송 형태 : " + 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("","\n"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 성공]");
							Log.d("","\n"+"["+"응답 코드 : " + String.valueOf(responseCode)+"]");
							Log.d("","\n"+"["+"응답 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 실패]");
							Log.d("","\n"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]");
							Log.d("","\n"+"["+"에러 값 : " + String.valueOf(responseData)+"]");
							Log.e("//===========//","================================================");
							Log.d("---","---");
						}
					});
				}
			});
		} catch (final Exception e){
			runOnUiThread(new Runnable() {
				public void run() {
					Log.d("---","---");
					Log.e("//===========//","================================================");
					Log.d("","\n"+"[A_OkHttp > requestAsyncPostHttp() 메소드 : OK HTTP 비동기 POST 요청 실패 - CATCH]");
					Log.d("","\n"+"["+"에러 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 실시]");
			Log.d("","\n"+"["+"요청 주소 : " + String.valueOf(url)+"]");
			Log.d("","\n"+"["+"전송 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 성공]");
							Log.d("","\n"+"["+"응답 코드 : " + String.valueOf(responseCode)+"]");
							Log.d("","\n"+"["+"응답 값 : " + 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("","\n"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 실패]");
							Log.d("","\n"+"["+"에러 코드 : " + String.valueOf(responseCode)+"]");
							Log.d("","\n"+"["+"에러 값 : " + String.valueOf(responseData)+"]");
							Log.e("//===========//","================================================");
							Log.d("---","---");
						}
					});
				}
			});
		} catch (final Exception e){
			runOnUiThread(new Runnable() {
				public void run() {
					Log.d("---","---");
					Log.e("//===========//","================================================");
					Log.d("","\n"+"[A_OkHttp > requestAsyncPostBodyJsonHttp() 메소드 : OK HTTP 비동기 POST BODY JSON 요청 실패 - CATCH]");
					Log.d("","\n"+"["+"에러 값 : " + String.valueOf(e.getMessage())+"]");
					Log.e("//===========//","================================================");
					Log.d("---","---");
				}
			});
			e.printStackTrace();
		}
	}

 


[결과 출력]


 

반응형
Comments