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;
}
참고링크
https://todaycode.tistory.com/41
'프로그래밍 > 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 |
댓글