Synchronous call
API class
class APIRequest {
fun getDataByHttpOK(): ArrayList<Item> {
val apiUrl = "..."
val httpClientBuilder = OkHttpClient.Builder()
.readTimeout(1, TimeUnit.DAYS)
val httpClient = httpClientBuilder.build()
val request = Request.Builder()
.url(apiUrl)
.addHeader("x-api-key", BuildConfig.MIDDLEWARE_APIKEY)
.build()
var items = ArrayList<Item>()
try {
val response = httpClient.newCall(request).execute()
if (response.isSuccessful) {
val records = JSONArray(response.body()?.string())
...
}
} catch (e: IOException) {
e.printStackTrace()
}
return items
}
}
class APIRequest {
fun getDataByHttpOK(): ArrayList<Item> {
val apiUrl = "..."
val httpClientBuilder = OkHttpClient.Builder()
.readTimeout(1, TimeUnit.DAYS)
val httpClient = httpClientBuilder.build()
val request = Request.Builder()
.url(apiUrl)
.addHeader("x-api-key", BuildConfig.MIDDLEWARE_APIKEY)
.build()
var items = ArrayList<Item>()
try {
val response = httpClient.newCall(request).execute()
if (response.isSuccessful) {
val records = JSONArray(response.body()?.string())
...
}
} catch (e: IOException) {
e.printStackTrace()
}
return items
}
}
class APIRequest { fun getDataByHttpOK(): ArrayList<Item> { val apiUrl = "..." val httpClientBuilder = OkHttpClient.Builder() .readTimeout(1, TimeUnit.DAYS) val httpClient = httpClientBuilder.build() val request = Request.Builder() .url(apiUrl) .addHeader("x-api-key", BuildConfig.MIDDLEWARE_APIKEY) .build() var items = ArrayList<Item>() try { val response = httpClient.newCall(request).execute() if (response.isSuccessful) { val records = JSONArray(response.body()?.string()) ... } } catch (e: IOException) { e.printStackTrace() } return items } }
API Request
class Presenter(val view: Contract.View) : Contract.Presenter, KoinComponent {
override fun getData() {
AsyncAPIRequest().execute()
}
inner class AsyncAPIRequest: AsyncTask<Void, Void, ArrayList<Ite m>>() {
private val apiRequest: APIRequest by inject()
override fun doInBackground(vararg params: Void?): ArrayList<Item> {
return apiRequest.getDataByHttpOK()
}
override fun onPostExecute(items: ArrayList<Item>) {
super.onPostExecute(items)
// Do something with "items"
...
}
}
}
class Presenter(val view: Contract.View) : Contract.Presenter, KoinComponent {
override fun getData() {
AsyncAPIRequest().execute()
}
inner class AsyncAPIRequest: AsyncTask<Void, Void, ArrayList<Ite m>>() {
private val apiRequest: APIRequest by inject()
override fun doInBackground(vararg params: Void?): ArrayList<Item> {
return apiRequest.getDataByHttpOK()
}
override fun onPostExecute(items: ArrayList<Item>) {
super.onPostExecute(items)
// Do something with "items"
...
}
}
}
class Presenter(val view: Contract.View) : Contract.Presenter, KoinComponent { override fun getData() { AsyncAPIRequest().execute() } inner class AsyncAPIRequest: AsyncTask<Void, Void, ArrayList<Ite m>>() { private val apiRequest: APIRequest by inject() override fun doInBackground(vararg params: Void?): ArrayList<Item> { return apiRequest.getDataByHttpOK() } override fun onPostExecute(items: ArrayList<Item>) { super.onPostExecute(items) // Do something with "items" ... } } }
Asynchronous call
API class
class APIRequest {
fun getDataByHttpOK(callback: GetItemCallback) {
// Building OkHttp Client
val apiUrl = "..."
val httpClientBuilder = OkHttpClient.Builder()
.readTimeout(1, TimeUnit.DAYS)
val httpClient = httpClientBuilder.build()
// Http Get request
val request = Request.Builder()
.url(apiUrl)
.addHeader("x-api-key", BuildConfig.MIDDLEWARE_APIKEY)
.build()
// Make a request
httpClient.newCall(request).enqueue(object: Callback {
override fun onFailure(call: Call, e: IOException) {
callback.onError(e)
}
override fun onResponse(call: Call, response: Response) {
var items: ArrayList<Item> = ArrayList()
try {
if (response.isSuccessful) {
val records = JSONArray(response.body()?.string())
...
}
} catch (e: IOException) {
e.printStackTrace()
}
callback.onSuccess(items)
}
})
}
interface GetItemCallback {
fun onSuccess(body: ArrayList<Item>)
fun onError(error: Throwable?)
}
}
class APIRequest {
fun getDataByHttpOK(callback: GetItemCallback) {
// Building OkHttp Client
val apiUrl = "..."
val httpClientBuilder = OkHttpClient.Builder()
.readTimeout(1, TimeUnit.DAYS)
val httpClient = httpClientBuilder.build()
// Http Get request
val request = Request.Builder()
.url(apiUrl)
.addHeader("x-api-key", BuildConfig.MIDDLEWARE_APIKEY)
.build()
// Make a request
httpClient.newCall(request).enqueue(object: Callback {
override fun onFailure(call: Call, e: IOException) {
callback.onError(e)
}
override fun onResponse(call: Call, response: Response) {
var items: ArrayList<Item> = ArrayList()
try {
if (response.isSuccessful) {
val records = JSONArray(response.body()?.string())
...
}
} catch (e: IOException) {
e.printStackTrace()
}
callback.onSuccess(items)
}
})
}
interface GetItemCallback {
fun onSuccess(body: ArrayList<Item>)
fun onError(error: Throwable?)
}
}
class APIRequest { fun getDataByHttpOK(callback: GetItemCallback) { // Building OkHttp Client val apiUrl = "..." val httpClientBuilder = OkHttpClient.Builder() .readTimeout(1, TimeUnit.DAYS) val httpClient = httpClientBuilder.build() // Http Get request val request = Request.Builder() .url(apiUrl) .addHeader("x-api-key", BuildConfig.MIDDLEWARE_APIKEY) .build() // Make a request httpClient.newCall(request).enqueue(object: Callback { override fun onFailure(call: Call, e: IOException) { callback.onError(e) } override fun onResponse(call: Call, response: Response) { var items: ArrayList<Item> = ArrayList() try { if (response.isSuccessful) { val records = JSONArray(response.body()?.string()) ... } } catch (e: IOException) { e.printStackTrace() } callback.onSuccess(items) } }) } interface GetItemCallback { fun onSuccess(body: ArrayList<Item>) fun onError(error: Throwable?) } }
API request
class Presenter(val view: Contract.FaqView) : Contract.Presenter, KoinComponent {
private val apiRequest: APIRequest by inject()
override fun getData() {
apiRequest.getDataByHttpOK(object: APIRequest.GetItemCallback{
override fun onSuccess(items: ArrayList<Item>) {
// Do something with items
...
}
override fun onError(error: Throwable?) {
}
})
}
}
class Presenter(val view: Contract.FaqView) : Contract.Presenter, KoinComponent {
private val apiRequest: APIRequest by inject()
override fun getData() {
apiRequest.getDataByHttpOK(object: APIRequest.GetItemCallback{
override fun onSuccess(items: ArrayList<Item>) {
// Do something with items
...
}
override fun onError(error: Throwable?) {
}
})
}
}
class Presenter(val view: Contract.FaqView) : Contract.Presenter, KoinComponent { private val apiRequest: APIRequest by inject() override fun getData() { apiRequest.getDataByHttpOK(object: APIRequest.GetItemCallback{ override fun onSuccess(items: ArrayList<Item>) { // Do something with items ... } override fun onError(error: Throwable?) { } }) } }
RxJava2 & Retrofit
Data model
@Parcelize
data class Item(
val question: String?,
val answer: String?
) : Parcelable
@Parcelize
data class Item(
val question: String?,
val answer: String?
) : Parcelable
@Parcelize data class Item( val question: String?, val answer: String? ) : Parcelable
API class
Interface
interface DataApi {
@GET("/items")
fun getItems(): Single<List<Item>>
}
interface DataApi {
@GET("/items")
fun getItems(): Single<List<Item>>
}
interface DataApi { @GET("/items") fun getItems(): Single<List<Item>> }
Class
class APIRequest : KoinComponent {
private val dataApi: DataApi by inject()
fun getData(callback: GetItemCallback) {
val subscription = dataApi.getItems()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
callback.onSuccess(response)
}, { throwable ->
callback.onError(throwable)
})
}
interface GetItemCallback {
fun onSuccess(items: List<Item>)
fun onError(error: Throwable?)
}
}
class APIRequest : KoinComponent {
private val dataApi: DataApi by inject()
fun getData(callback: GetItemCallback) {
val subscription = dataApi.getItems()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
callback.onSuccess(response)
}, { throwable ->
callback.onError(throwable)
})
}
interface GetItemCallback {
fun onSuccess(items: List<Item>)
fun onError(error: Throwable?)
}
}
class APIRequest : KoinComponent { private val dataApi: DataApi by inject() fun getData(callback: GetItemCallback) { val subscription = dataApi.getItems() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ response -> callback.onSuccess(response) }, { throwable -> callback.onError(throwable) }) } interface GetItemCallback { fun onSuccess(items: List<Item>) fun onError(error: Throwable?) } }
API Request
class Presenter(val view: Contract.View) : Contract.Presenter, KoinComponent {
private val apiRequest: APIRequest by inject()
override fun getData() {
view.showProgress()
apiRequest.getData(object : APIRequest.GetItemCallback {
override fun onSuccess(items: List<Item>) {
// Do something with items here
...
view.hideProgress()
}
override fun onError(error: Throwable?) {
view.hideProgress()
}
})
}
}
class Presenter(val view: Contract.View) : Contract.Presenter, KoinComponent {
private val apiRequest: APIRequest by inject()
override fun getData() {
view.showProgress()
apiRequest.getData(object : APIRequest.GetItemCallback {
override fun onSuccess(items: List<Item>) {
// Do something with items here
...
view.hideProgress()
}
override fun onError(error: Throwable?) {
view.hideProgress()
}
})
}
}
class Presenter(val view: Contract.View) : Contract.Presenter, KoinComponent { private val apiRequest: APIRequest by inject() override fun getData() { view.showProgress() apiRequest.getData(object : APIRequest.GetItemCallback { override fun onSuccess(items: List<Item>) { // Do something with items here ... view.hideProgress() } override fun onError(error: Throwable?) { view.hideProgress() } }) } }
Leave a Reply