androidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eyedoc">
<!-- retrofit 사용을 위한 인터넷 사용권한 추가-->
<uses-permission android:name="android.permission.INTERNET" />
<application
...블라블라 기존에있는 내용
</application>
</manifest>
//////////////////////////////////
// 아래코드는 선택사항입니다. https뿐만아니라 http도 접속가능하게 해주는 코드
<application
android:"블라블라"
.
.
.
android:usesCleartextTraffic="true">
</application>
build.gradle
dependencies {
//Retrofit - default
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
//Retrofit - gson
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}
interface 정의
import retrofit2.Call
import retrofit2.http.*
interface RetrofitService {
//post1
// 매개변수를 미리 정해두는 방식
@FormUrlEncoded
@POST("/test")
fun postRequest(
@Field("id") id: String,
@Field("pw") pw: String
): Call<ResponseDTO>
//post2
// 호출하는 곳에서 매개변수를 HashMap 형태로 보내는 방식
@POST("{path}")
fun connectRequest(
@Path("path") retrofitPath: String,
@Body parameters: HashMap<String, Any>
): Call<ResponseDTO>
}
object정의
import android.util.Log
import com.google.gson.GsonBuilder
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
// baseUrl은 예시로 localhost 프로젝트 링크를 넣어서 테스트했습니다.
suspend fun connectNetwork(path : String, param : JsonObject
, context : Context // 실패했을때 토스트메시지를 띄워주기 위한 컨텍스트
, onSuccess : () -> Unit // 성공했을때 실행할 함수(이벤트)
){
// 호출하는 곳에서 매개변수를 HashMap 형태로 보내는 방식
// 서버에서 보낸 JSON의 Key값을 가져옴
RetrofitInstance.SERVER.connectRequest(path, param).enqueue(object : Callback<ResponseDTO>{
override fun onResponse(call: Call<ResponseDTO>?, response: Response<ResponseDTO>?) {
Log.d("Retrofit", "$path 요청성공")
if(response!!.isSuccessful) {
resultString = response.body()?.returnValue.toString()
onSuccess()
}
else {
Toast.makeText(context, "서버와 연결을 시도했으나 실패했습니다.", Toast.LENGTH_SHORT).show()
}
NetworkConnect.endProgress()
}
override fun onFailure(call: Call<ResponseDTO>?, t: Throwable?) {
NetworkConnect.endProgress()
Toast.makeText(context, "인터넷 연결을 확인하여주십시오.", Toast.LENGTH_SHORT).show()
Log.d("Retrofit", "$path 요청실패")
}
})
}
object Define {
val BASE_URL : String = "http://10.0.2.2:8080/프로젝트명/"
}
object RetrofitInstance {
val gson = GsonBuilder().setLenient().create()
val okHttpClient = OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS).readTimeout(30,TimeUnit.SECONDS).writeTimeout(30,TimeUnit.SECONDS).build() // n초동안 기다리도록 만드는 변수
val RETROFIT = Retrofit.Builder().baseUrl(Define.BASE_URL).client(okHttpClient).addConverterFactory(GsonConverterFactory.create()).build() // BASE_URL에 접근하기 위한 변수
val SERVER : RetrofitService = RetrofitInstance.RETROFIT.create(RetrofitService::class.java) // RetrofitService에 만든 서비스를 사용하기 위한 변수
}
데이터클래스 생성
ResponseDTO.kt
data class ResponseDTO (var id : String, var pw : String )
Server쪽 Controller 코드
@RequestMapping(value="/login.do")
public @ResponseBody HashMap<String, Object> connectTest(HttpServletRequest request, @RequestBody HashMap<String, Object> param)
{
HashMap<String, Object> returnValue = new HashMap<String, Object>();
System.out.println("HashMap 값 : " + param);
returnValue.put("id", param.get("id").toString());
returnValue.put("pw", param.get("pw").toString());
System.out.println("Json 값 : " + returnValue);
return returnValue;
}
참고링크
안드로이드 RetroFit Post Java 적용 순서, 예제
간단하게 RetroFit Post 적용할 수 있는 순서에대한 설명글입니다. 기반지식이 없는 상태에서 Retrofit을 적용하려니 꽤 힘들었었습니다. 그래서 답답했던 마음에, 혹시라도 저처럼 해매지 마시라고,
morm.tistory.com
https://todaycode.tistory.com/41
레트로핏을 이용하여 서버와 통신하자!
1. 사용법 1-1. Interface 정의 1-2. Retrofit 객체 생성 1-3. HTTP 요청과 응답 2. 예제 소스 이번 게시물에서는 Retrofit을 이용하여 버튼을 누를 때마다 다음 페이지의 공지사항을 불러와서 띄우는 기..
todaycode.tistory.com
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] 안드로이드 자동로그인 코드 (0) | 2021.12.09 |
---|---|
Json데이터 생성 및 Gson 사용 (0) | 2021.12.07 |
중첩클래스 사용이유 (0) | 2021.11.26 |
[Kotlin] 제네릭(Generic) (0) | 2021.11.18 |
스레드와 코루틴의 차이 (0) | 2021.11.05 |
댓글