import android.content.Context
import android.widget.Toast
import com.loopj.android.http.AsyncHttpClient
import com.loopj.android.http.JsonHttpResponseHandler
import cz.msebera.android.httpclient.Header
import cz.msebera.android.httpclient.entity.StringEntity
import org.json.JSONArray
import org.json.JSONObject
class ApiHelper(var context: Context) {
//POST
fun post(api: String, jsonData: JSONObject, callBack: CallBack) {
Toast.makeText(context, "Please Wait for response", Toast.LENGTH_LONG).show()
val client = AsyncHttpClient(true, 80, 443)
val con_body = StringEntity(jsonData.toString())
//val token = PrefsHelper.getPrefs(context, "refresh_token")
val token = PrefsHelper.getPrefs(context, "access_token")
client.addHeader("Authorization", "Bearer $token")
//post to API
client.post(context, api, con_body, "application/json",
object : JsonHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONArray?
) {
callBack.onSuccess(response)
//Toast.makeText(context, "Response $response ", Toast.LENGTH_SHORT).show()
}
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONObject?
) {
callBack.onSuccess(response)
}
override fun onFailure(
statusCode: Int,
headers: Array<out Header>?,
throwable: Throwable?,
errorResponse: JSONObject?
) {
callBack.onFailure(errorResponse.toString())
//super.onFailure(statusCode, headers, throwable, errorResponse)
//Todo handle the error
// Toast.makeText(
// context,
// "Error Occurred" + throwable.toString(),
// Toast.LENGTH_LONG
// ).show()
// progressbar.visibility = View.GONE
}
})
}//END POST
//Requires Access Token
fun post2(api: String, jsonData: JSONObject, callBack: CallBack) {
Toast.makeText(context, "Please Wait for response", Toast.LENGTH_LONG).show()
val client = AsyncHttpClient(true, 80, 443)
val con_body = StringEntity(jsonData.toString())
val token = PrefsHelper.getPrefs(context, "access_token")
client.addHeader("Authorization", "Bearer $token")
//post to API
client.post(context, api, con_body, "application/json",
object : JsonHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONArray?
) {
callBack.onSuccess(response)
//Toast.makeText(context, "Response $response ", Toast.LENGTH_SHORT).show()
}
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONObject?
) {
callBack.onSuccess(response)
}
override fun onFailure(
statusCode: Int,
headers: Array<out Header>?,
throwable: Throwable?,
errorResponse: JSONObject?
) {
callBack.onFailure(errorResponse.toString())
}
})
}//END POST
//GET
fun get(api: String, callBack: CallBack) {
val client = AsyncHttpClient(true, 80, 443)
//GET to API
client.get(context, api, null, "application/json",
object : JsonHttpResponseHandler() {
//When a JSOn array is Returned
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONArray
) {
//Push the response to Callback Interface
callBack.onSuccess(response)
}
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONObject?
) {
//Push the response to Callback Interface
callBack.onSuccess(response)
}
override fun onFailure(
statusCode: Int,
headers: Array<out Header>?,
responseString: String?,
throwable: Throwable?
) {
callBack.onFailure(responseString)
}
})
}//END GET
//PUT
fun put(api: String, jsonData: JSONObject) {
Toast.makeText(context, "Please Wait for response", Toast.LENGTH_LONG).show()
val client = AsyncHttpClient(true, 80, 443)
val con_body = StringEntity(jsonData.toString())
//PUT to API
client.put(context, api, con_body, "application/json",
object : JsonHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONObject?
) {
Toast.makeText(context, "Response $response ", Toast.LENGTH_SHORT).show()
}
override fun onFailure(
statusCode: Int,
headers: Array<out Header>?,
throwable: Throwable?,
errorResponse: JSONObject?
) {
//Todo handle the error
Toast.makeText(
context,
"Error Occurred" + throwable.toString(),
Toast.LENGTH_LONG
).show()
}
})
}//END PUT
//DELETE
fun delete(api: String, jsonData: JSONObject) {
Toast.makeText(context, "Please Wait for response", Toast.LENGTH_LONG).show()
val client = AsyncHttpClient(true, 80, 443)
val con_body = StringEntity(jsonData.toString())
//DELETE to API
client.delete(context, api, con_body, "application/json",
object : JsonHttpResponseHandler() {
override fun onSuccess(
statusCode: Int,
headers: Array<out Header>?,
response: JSONObject?
) {
Toast.makeText(context, "Response $response ", Toast.LENGTH_SHORT).show()
}
override fun onFailure(
statusCode: Int,
headers: Array<out Header>?,
throwable: Throwable?,
errorResponse: JSONObject?
) {
//super.onFailure(statusCode, headers, throwable, errorResponse)
//Todo handle the error
Toast.makeText(
context,
"Error Occurred" + throwable.toString(),
Toast.LENGTH_LONG
).show()
// progressbar.visibility = View.GONE
}
})
}//END DELETE
//Interface to used by the GET function above.
//All APis responses either JSON array [], JSON Object {}, String ""
//Are brought here
interface CallBack {
fun onSuccess(result: JSONArray?)
fun onSuccess(result: JSONObject?)
fun onFailure(result: String?)
}
}