Android/Kotlin

[Kotlin] Retrofit

lipnus 2018. 11. 24. 19:23
반응형



코틀린으로 구현한 Retrofit.

공식사이트: https://square.github.io/retrofit/

 


1.Gradle

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

두개의 버전은 일치시켜 준다.




2.Manifests

<uses-permission android:name="android.permission.INTERNET" />




3.XML

버튼 두개 만들어준다.





3.RetrofitService.kt

data class ResponseDTO(var result:String? = null)

interface RetrofitService{

//post
@FormUrlEncoded
@POST("/test")
fun postRequest(@Field("id") id: String,
@Field("pw") pw: String): Call<ResponseDTO>

//post2
@POST("/{path}")
fun testRequest(@Path("path")path: String, @Body parameters: HashMap<String, Any>): Call<ResponseDTO>
}

get, put.. 이런 애들은 일단 생략하고 post만.

위에건 저기다가 미리 매개변수를 정해두는거고, 두번째껀 호출하는 곳에서 매개변수를 HashMap형태로 보내는 방식.

두번째꺼가 지금까지 사용하던 방식이다.


DTO는 지금은 string값 하나가 끝이라서 젤 위에 약식으로만 만들어놓았다.




3.MainActivity.kt

class MainActivity : AppCompatActivity() {

var server: RetrofitService? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//Retrofit
var retrofit = Retrofit.Builder()
.baseUrl("http://10.0.2.2:9000")
.addConverterFactory(GsonConverterFactory.create())
.build()
server = retrofit.create(RetrofitService::class.java)


onClick_btn()
}


//버튼클릭
fun onClick_btn(){

btn_post.setOnClickListener {
server?.postRequest("lipnus","111111")?.enqueue(object : Callback<ResponseDTO>{
override fun onFailure(call: Call<ResponseDTO>?, t: Throwable?) {
Log.e("SSS", t.toString())
}

override fun onResponse(call: Call<ResponseDTO>?, response: Response<ResponseDTO>?) {
Log.d("SSS", response?.body().toString())
}
})
}



btn_test.setOnClickListener {

var params:HashMap<String, Any> = HashMap<String, Any>()
params.put("id", "sunpil")
params.put("pw", 123123)

server?.testRequest("test", params)?.enqueue(object : Callback<ResponseDTO>{
override fun onFailure(call: Call<ResponseDTO>?, t: Throwable?) {
Log.e("Retrofit", t.toString())
}

override fun onResponse(call: Call<ResponseDTO>?, response: Response<ResponseDTO>?) {
var res: ResponseDTO? = response?.body()

Log.d("Retrofit", res?.result)

}
})
}

}
}




3.Node.js


router.post('/', function(req,res){


let id = req.body.id

let pw = req.body.pw


console.log("id:" + id + " pw:" + pw)


let responseData = {}

responseData.result = "테스트"

res.json(responseData)

});//post





안드로이드 로그캣에는
11-24 21:12:27.274 27358-27358/com.example.lipnus.retrofit D/SSS: ResponseDTO(result=테스트)



*영상: https://www.youtube.com/watch?v=iGW9QHp2uMg&t=609s

*코드https://github.com/you6878/KALRetrofit

반응형

'Android > Kotlin' 카테고리의 다른 글

kotlin기본 문법  (0) 2018.11.25
[Kotlin] HashMap  (0) 2018.11.24
Glide  (0) 2018.11.24
Button  (0) 2018.11.20
Class - nested  (0) 2018.11.20