Android retrofit


retrofit


自主開発したapiサーバーに接続するAndroidアプリが必要なため、改造の仕方を学び始めた.
サーバーにログインするには、ネット名でメールを調べ、携帯電話番号でメールを調べます.
初めて私がしなければならないのはインタフェースを作成することです.
public interface  mannayoService {
    @POST("/members/findMyAccountByNickname")
    fun getMyAccountByNickname(@Body reqdata: SendNicknameRequestData): Call<resdata>

    @POST("/members/findMyAccountByPhoneNumber")
    fun getMyAccountByPhoneNumber(@Body reqdata: SendPhoneNumberRequestData): Call<resdata>
}
@Post Arnotationを使用してサーバにデータ送信を通知します.
@Body Arnotationを使用してSendPhoneNumberRequestデータ型のデータクラスを作成
Jsonで解析します.
SendPhoneNumberRequestData、SendNickNameRequestDataは以下の通りです.
data class SendNicknameRequestData (
    @SerializedName("nickName")
    @Expose
    val nickname: String,
    @SerializedName("realName")
    @Expose
    val realname: String
        )
        
data class SendPhoneNumberRequestData (
    @SerializedName("phoneNumber")
    @Expose
    val phoneNumber: String,
    @SerializedName("realName")
    @Expose
    val realname : String
        )
@SerialzedName
JSONで一致する名前を指定するためのフィールドタグ言語.
@Expose
objectの値がnullの場合、jsonとして作成するフィールドは自動的に省略されます.
すでにdataクラスが実現されており,初期化改造が可能である.
val retrofit = Retrofit.Builder()
            .baseUrl("http://192.168.0.2:8080")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
改造初期化が完了すると、改造サービスオブジェクトを生成する必要があります.
val service = retrofit.create(mannayoService::class.java)
前に定義したインタフェースをパラメータとして変形create()メソッドに渡すと、
実行可能なサービスオブジェクトを生成して返します.
service.getMyAccountByNickname(sendNicknameData).enqueue()
サービスはmannayoServiceインタフェースを使用してオブジェクトを作成します.
呼び出し可能な状態のgetMyAccountByNickname()、getMyAccountByPhoneNumber()
所有する
改善されたcreate()メソッドは、インタフェースを実行可能なサービスオブジェクトにします.
getMyAccountByNickname()、getMyAccountByPhoneNumber()メソッドには、非同期通信でデータを取得するenqueue()メソッドが追加されています.enqueue()を呼び出すと、通信が開始されます.
service.getMyAccountByNickname(sendNicknameData).enqueue(object : Callback<resdata> {
                    override fun onFailure(call: Call<resdata>, t: Throwable) {
                        binding.textView4.text = "인터넷 연결을 확인해 주세요!!"
                    }

                    override fun onResponse(call: Call<resdata>, response: Response<resdata>) {
                        if (response.isSuccessful) {
                            val reqresponse = response.body() as resdata
                            binding.textView4.text =
                                sendNicknameData.realname + "님의 이메일 아이디는 " + reqresponse.email + " 입니다."
                        } else {
                            binding.textView4.text = "가입하신 이력이 없습니다."
                        }
                    }
                })
service.getMyAccountByPhoneNumber(sendPhoneNumberData).enqueue(object : Callback<resdata> {
                    override fun onFailure(call: Call<resdata>, t: Throwable) {
                        binding.textView4.text = "인터넷 연결을 확인해 주세요!!"
                    }

                    override fun onResponse(call: Call<resdata>, response: Response<resdata>) {
                        if (response.isSuccessful) {
                            val reqresponse = response.body() as resdata
                            binding.textView4.text =
                                sendPhoneNumberData.realname + "님의 이메일 아이디는 " + reqresponse.email + " 입니다."
                        } else {
                            binding.textView4.text = "가입하신 이력이 없습니다."
                        }
                    }
                })
onFailure関数は、通信に失敗したときに呼び出されるメソッドです.
onResponseは、通信が成功したときに呼び出される方法です.
ただし、onResponseが通信に成功したときに2 xxのコードではなく、4 xxのエラーコードを返すと、onResponseが呼び出されます.
if (response.isSuccessful)
文に条件を入れると、2 xxコードの戻り時と4 xxコードの戻り時を別々に実施できます.
アンドロイドの改造はここまでです.
次回は、リクエストしたデータを改造して応答するプロセスを書きます.