티스토리 뷰

반응형

안드로이드에서 정말 간단하게 HTTP통신을 수행할 수 있다.

주의할점은 네트워크통신은 무조건 메인스레드가 아닌 작업스레드에서 진행해야한다.



1. build.gradle에 okhttp 선언

compile 'com.squareup.okhttp3:okhttp:3.8.0'


2. HttpConnection.class 추가

import android.util.Log;

import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

public class HttpConnection {

private OkHttpClient client;
private static HttpConnection instance = new HttpConnection();
public static HttpConnection getInstance() {
return instance;
}

private HttpConnection(){ this.client = new OkHttpClient(); }


/** 웹 서버로 요청을 한다. */
public void requestWebServer(String parameter, String parameter2, Callback callback) {
RequestBody body = new FormBody.Builder()
.add("parameter", parameter)
.add("parameter2", parameter2)
.build();
Request request = new Request.Builder()
.url("http://mydomain.com/sendData")
.post(body)
.build();
client.newCall(request).enqueue(callback);
}

}

생성자를 private 로 설정하고 getInstance()를 통해서 내부에서 단 한번만 객체를 생성하도록 해서 싱글톤 패턴을 적용했다.



3. TestActivity.class에서 HTTP요청 

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class TestActivity extends AppCompatActivity {

private static final String TAG = "TestActivity";
private HttpConnection httpConn = HttpConnection.getInstance();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

sendData(); // 웹 서버로 데이터 전송
}

/** 웹 서버로 데이터 전송 */
private void sendData() {
// 네트워크 통신하는 작업은 무조건 작업스레드를 생성해서 호출 해줄 것!!
new Thread() {
public void run() {
// 파라미터 2개와 미리정의해논 콜백함수를 매개변수로 전달하여 호출
httpConn.requestWebServer("데이터1","데이터2", callback);
}
}.start();;
}

private final Callback callback = new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "콜백오류:"+e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String body = response.body().string();
Log.d(TAG, "서버에서 응답한 Body:"+body);
}
};

}


반응형

'프로그래밍 > 안드로이드' 카테고리의 다른 글

안드로이드 서비스(Service) 기초  (0) 2017.09.29
브로드캐스트 리시버 정리  (0) 2017.02.21
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함