آموزش Retrofit در کوتلین
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش Retrofit در کوتلین می پردازیم قبلا آموزش های مختلفی از کتابخانه Retrofit برای شما قرار دادیم امروز به آموزش Retrofit در کوتلین (ktolin) می پردازیم در ادامه با ما همراه باشید تا نحوه استفاده از کتابخانه Retrofit را در زبان برنامه نویسی کوتلین (kotlin) را یاد گیرید.
در این آموزش ما با سایت Wikipedia ها کار خواهیم کرد و به انجام عمل سرچ و query در وب سایت بزرگ Wikipedia خواهیم پرداخت با ما همراه باشید.
ابتدای کار باید دسترسی مربوط به استفاده از اینترنت را به فایل AndroidManifest.xml اضافه کنید.
<uses-permission android:name="android.permission.INTERNET" />
یک layout به نام activity_main.xml داریم و کدهای زیر در آن قرار دارد.
<?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 را توضیح داده ایم. (لینک آموزش)
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 ایجاد کنید و کدهای زیر را در آن قرار دهید.
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 همانند زیر خواهد شد.
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()
}
}
در بالا بعد از وارد کردن یک متن عمل جستجو در وب سایت ویکی انجام می شود.
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
آموزش برنامه نویسی اندروید |