Notice
Recent Posts
Recent Comments
Link
투케이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();
}
}
[결과 출력]
반응형
'Android' 카테고리의 다른 글
Comments