آموزش Retrofit در کوتلین
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش Retrofit در کوتلین می پردازیم قبلا آموزش های مختلفی از کتابخانه Retrofit برای شما قرار دادیم امروز به آموزش Retrofit در کوتلین (ktolin) می پردازیم در ادامه با ما همراه باشید تا نحوه استفاده از کتابخانه Retrofit را در زبان برنامه نویسی کوتلین (kotlin) را یاد گیرید.
در این آموزش ما با سایت Wikipedia ها کار خواهیم کرد و به انجام عمل سرچ و query در وب سایت بزرگ Wikipedia خواهیم پرداخت با ما همراه باشید.
ابتدای کار باید دسترسی مربوط به استفاده از اینترنت را به فایل AndroidManifest.xml اضافه کنید.
1 | <uses-permission android:name="android.permission.INTERNET" /> |
یک layout به نام activity_main.xml داریم و کدهای زیر در آن قرار دارد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dp" tools:context=".MainActivity"> <EditText android:id="@+id/edit_search" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/hint_search_string" android:textAlignment="center" /> <Button android:id="@+id/btn_search" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/button_search" /> <TextView android:id="@+id/txt_search_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAlignment="center" android:textSize="24sp" /> </LinearLayout> |
در بالا یک EditText به منظور وارد کردن یک رشته به منظور جستجو در wikipedia مورد استفاده قرار می گیرد یک TextView به منظور دیدن تعداد رکورد های مورد جستجو استفاده می شود و یک دکمه به منظور انجام عملیات .
ابتدای کار یک کلاس Model درست می کنیم قبلا اکلاس Data Model را توضیح داده ایم. (لینک آموزش)
1 2 3 4 5 6 | package ir.programchi object Model { data class Result(val query: Query) data class Query(val searchinfo: SearchInfo) data class SearchInfo(val totalhits: Int) } |
کلاس بالا همان Getter و Setter است که قبلا بسیار استفاده کردیم.
خب یک کلاس api باید درست کنیم که با سایت در ارتباط باشد.
پس یک فایل کوتلین به نام WikiApiService.kt ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package ir.programchi import io.reactivex.Observable import retrofit2.http.GET import retrofit2.Retrofit import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.Query interface WikiApiService { @GET("api.php") fun hitCountCheck(@Query("action") action: String, @Query("format") format: String, @Query("list") list: String, @Query("srsearch") srsearch: String): Observable<Model.Result> companion object { fun create(): WikiApiService { val retrofit = Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl("https://en.wikipedia.org/w/") .build() return retrofit.create(WikiApiService::class.java) } } } |
در بالا api سرویس ساختیم یعنی به یک url که به api.php خطم می شود را در بالا قرار دادیم.
در بالا ما آدرس مربوط به Api ویکی پدیا را قرار دادیم و به آن Request خواهیم زد.
در نهایت کد مربوط به MainActivity.kt همانند زیر خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package ir.programchi import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { private var disposable: Disposable? = null private val wikiApiServe by lazy { WikiApiService.create() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btn_search.setOnClickListener { if (edit_search.text.toString().isNotEmpty()) { beginSearch(edit_search.text.toString()) } } } private fun beginSearch(searchString: String) { disposable = wikiApiServe.hitCountCheck("query", "json", "search", searchString) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( { result -> txt_search_result.text = "${result.query.searchinfo.totalhits} result found" }, { error -> Toast.makeText(this, error.message, Toast.LENGTH_SHORT).show() } ) } override fun onPause() { super.onPause() disposable?.dispose() } } |
در بالا بعد از وارد کردن یک متن عمل جستجو در وب سایت ویکی انجام می شود.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.