حمید امیرحاجلو
حمید امیرحاجلو
خواندن ۲ دقیقه·۴ سال پیش

برنامه نویسی RPC در Kotlin android با کتابخانه Retrofit و سرور PHP


تنها چیزی که لازم است بدانیم این است که چه عنصری از سمت سرور دریافت می شود و سپس کلاس داده متناظر با آن را ایجاد میکنیم .

کلاس داده را هم میتوان بصورت دستی و هم بصورت خودکار، با دادن فایل IDL دریافتی( که در اینجا منظور JSON است )به سایتهای تبدیل کننده خیلی سریع برای زبان مورد نظر دریافت کرد و در برنامه از آن استفاده کرد.

با این کار اکنون ما یک زبان مشترک که ارتباط بین سرور PHP و کلاینت Kotlin را برقرار می کند داریم.

بعنوان نمونه، ما یک داده دریافتی از سرور با لینک https://jsonplaceholder.typicode.com/posts و فرمت JSONداریم.

کلاس داده متناظر با این داده که قابل استفاده در زبان مورد نظر ماست به شکل زیر خواهد بود:

data class Post(val userId: Int, val id: Int, val title: String, val body: String )

کتابخانه rpc ما که در اینجا Retrofit است ، یک مبدل (converter-gson) دریافت می کند که بصورت خودکار کلاس داده ما را به فرمت قابل فهم برای سرور تبدیل می کند و داده دریافتی را تبدیل به شیئی از نوع کلاس داده ما میکند و برای استفاده دقیقا مثل کلاس های محلی می شود.
مبدل ها را می توان برای پشتیبانی از انواع دیگر IDL اضافه کرد. 6 ماژول محبوب سریال سازی قابل پشتیبانی عبارتند از:

  • · Gson: com.squareup.retrofit2:converter-gson
  • · Jackson: com.squareup.retrofit2:converter-jackson
  • · Moshi: com.squareup.retrofit2:converter-moshi
  • · Protobuf: com.squareup.retrofit2:converter-protobuf
  • · Wire: com.squareup.retrofit2:converter-wire
  • · Simple XML: com.squareup.retrofit2:converter-simplexml
  • · JAXB: com.squareup.retrofit2:converter-jaxb
  • · Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

برای برقراری ازتباط با سرور نیاز به interface داریم که در آن از متدهای HTTP استفاده می شود. تمام متد هایی که میتواند درPHP و هدر استفاده شود پشتیبانی می شود. در اینجا ما با GET لیستی از پست ها دریافت خواهیم کرد:

interface PostService {     @GET(&quotposts&quot)     fun getPost(): Call<List<Post>> }

اکنون یک کلاس کمکی برای برقراری ارتباط با سرور و ایجاد یک سرویس جهت استفاده آن در کد خودمان ، نیاز داریم که بصورت زیر تعریف می شود:

PostApi.kt

object PostApi {         private val retrofit = Retrofit.Builder()         .baseUrl(&quothttps://jsonplaceholde.typicode.com/&quot)         .addConverterFactory(GsonConverterFactory.create())         .build()     val service = retrofit.create(PostService::class.java) }

همه چیز تمام شد فقط کافیست درون کدمان جایی که میخواهیم متدهای ریموت را صدا بزنیم ،از طریق سرویس به متد های HTTPدسترسی پیدا کنیم:

PostApi.service.getPost().execute().body().apply {         this?.forEach {             println(it.userId)             println(it.id)             println(it.title)             println(it.body)         }     }
retrofitrpcandroidphp
به برنامه نویسی اندروید و تکنولوژی روز دنیا علاقمندم
شاید از این پست‌ها خوشتان بیاید