본문 바로가기
공부 및 활동/heroku, django

Android에서 Retrofit 적용할 때

by KChang 2021. 10. 10.

1. RetrofitClient.kt

Inkedretroift2_LI
.baseUrl("https://dongagd.herokuapp.com/")

baseUrl은 Root 주소를 적어주어야 해요.

현재 서버의 Root 주소는 "https://dongagd.herokuapp.com/" 입니다.

 

2. UserCreationElement

data요소들 생성하기 위한 data class

위 root 주소 https://dongagd.herokuapp.com/user/

내용
data class UserCreationElement (
    var username:String, var password:String,var phonenumber:String,var email:String,
    var familyname:String,var age:String, var dataofonesbirth:String
)

 

3. LoginAPI

interface LoginAPI {

    companion object{
        fun RetrofitClient(): LoginAPI? = getInstance()?.create(LoginAPI::class.java)
        fun create() : LoginAPI? {
            return getInstance()?.create()
        }
    }


    @POST("/user/")
    fun userlogin(@Body user: UserCreationElement) : Call<List>

userlogin 매개변수, user (UserCreationElement 요소들)

Call<List> : 이거는 반환 값임

@POST: 서버에 자원을 생성한다. (반환해주는게 없다.)

@PUT: 서버에서 자원을 수정한다. (반환해주는게 없다.)

@GET: 서버에서 존재하는 데이터를 가져온다. (반환해주는게 있다.)

~ 더있는데 구글링하면 쉽게 찾을 수 있다.

 

4. List

List가 서버에서 반환되는 값을 받는 곳이다.

@GET사용할 때 주로 사용한다. (@POST, @PUT할 때는 반환 값이 없어 아무거나 넣으면 된다.)

지금은 @POST 테스트라 반환 값 관련 LIST 클래스는 쓰이지 않는다.

@SerializedName

var 데이터 : Stirng 과 같이 사용한다.

class List(
    @SerializedName("age")
    var age : String,
    @SerializedName("email")
    var email: String,
    @SerializedName("familyname")
    var familyname:String,
    @SerializedName("password")
    var username:String

)

 

5. MainActivity.kt

package com.example.retro

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class MainActivity : AppCompatActivity() {

    // LoginAPI retrofit
    private val loginApi = LoginAPI.create()   // LoginAPI create 메소드 호출 3.LoginAPI에서 확인가능




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

        // "입력한 ~ 데이터" 위치에 각각
        // 이름, 패스워드, 휴대폰번호, 이메일, 성별(man or woman), 나이, 생년월일(211010)
        // 이거 입력하시면 되요.

        val userdata = "입력한 username 데이터"
        val passworddata = "입력한 password 데이터"
        val phonenumberdata = "입력한 phonenumber 데이터"
        val emaildata = "입력한 email 데이터"
        val familynamedata = "입력한 familyname 데이터"
        val agedata = "입력한 age 데이터"
        val dateofonesbirthdata = "입력한 dataofonesbirth 데이터"
        // 사용자가 입력한 데이터들이 UserCreateionElement 생성자 변수에 들어간다.
        val ucelement = UserCreationElement(
            "입력한 username 데이터","입력한 password 데이터","입력한 phonenumber 데이터","입력한 email 데이터","입력한 familyname 데이터","입력한 age 데이터","입력한 dateofonesbirth 데이터"
        )

            // API 작성 DB에 넘긴다.
            // loginApi는 위에 LoginApi.create()로 생성하였다.
            // userlogin은 LoginApi에 있는 메소드
            // ucelement는 바로 위에서 입력한 데이터들이다.
            // : Callback<List>는 4.List번에서 설명했듯이 Callback<List>는 반환되는 값이다.
            loginApi?.userlogin(ucelement)
                ?.enqueue(object : Callback<List> {
                    override fun onFailure(call: Call<List>, t: Throwable) {
                        Log.d("tag : ", "error")

                    }

                    override fun onResponse(
                        call: Call<List>,
                        response: Response<List>
                    ) {

                        // 데이터 전달하지 못했다면
                        if(response.isSuccessful){

                            ToastmakeTextPrint("프로젝트 모집글 작성 완료 되었습니다.")
                            Log.d("tag","결과 : ${response.code().toString()}")

                        }else{
                            ToastmakeTextPrint("프로젝트 모집글 작성이 완료되지 않았습니다.")
                            Log.d("tag","${response.code().toString()}")
                            Log.e("tag","onFailure" + response.message())
                        }
                    }
                })

    }
}

댓글