From a832944fbf3d858059c78482727c899488214d3f Mon Sep 17 00:00:00 2001 From: jinsu4755 Date: Sun, 17 Jan 2021 02:42:20 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[upload]=20=EB=A6=AC=EB=B7=B0=EC=9A=A9=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/request/RequestCallbackReview.kt | 58 +++++++++++++++++++ .../request/TimeStampPostRequestReview.kt | 46 +++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt create mode 100644 app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt diff --git a/app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt b/app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt new file mode 100644 index 0000000..4ab8653 --- /dev/null +++ b/app/src/main/java/meaning/morning/network/request/RequestCallbackReview.kt @@ -0,0 +1,58 @@ +/* + * Created by jinsu4755 + * DESC: callback 객체 구현하는 Request Class 시도해봄 그냥 궁금해서 + */ + +package meaning.morning.network.request + +import android.text.TextUtils +import android.util.Log +import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken +import meaning.morning.network.response.BaseResponse +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class RequestCallbackReview : Callback> { + + private var onSuccessListener: ((BaseResponse) -> Unit)? = null + private var onErrorListener: ((BaseResponse) -> Unit)? = null + private var onFailureListener: ((t: Throwable) -> Unit)? = null + + fun onSuccessListener(listener: ((BaseResponse) -> Unit)) { + this.onSuccessListener = listener + } + + fun onErrorListener(listener: (BaseResponse) -> Unit) { + this.onErrorListener = listener + } + + fun onFailureListener(listener: (t: Throwable) -> Unit) { + this.onFailureListener = listener + } + + override fun onResponse(call: Call>, response: Response>) { + if (response.isSuccessful) { + onSuccessListener?.invoke(response.body() ?: return) + return + } + val errorBody = response.errorBody()?.string() ?: return + val errorResponse = createResponseErrorBody(errorBody) + onErrorListener?.invoke(errorResponse) + } + + private fun createResponseErrorBody(errorBody: String): BaseResponse { + val gson = GsonBuilder().create() + val responseType = object : TypeToken>() {}.type + return gson.fromJson(errorBody, responseType) + } + + override fun onFailure(call: Call>, t: Throwable) { + Log.d("jinsu4755", "${t.message} \n") + Log.d("jinsu4755", "${t.localizedMessage} \n") + Log.d("jinsu4755", TextUtils.join("\n", t.stackTrace)) + onFailureListener?.invoke(t) + } +} + diff --git a/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt b/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt new file mode 100644 index 0000000..fb573b0 --- /dev/null +++ b/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt @@ -0,0 +1,46 @@ +/* + * Created by jinsu4755 + * DESC: + */ + +package meaning.morning.network.request + +import meaning.morning.network.MeaningService +import meaning.morning.network.response.TimeStampResponse +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MultipartBody +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody + +class TimeStampPostRequestReview( + private val dateTime: String, + private val timeStampContent: String, + private val image: MultipartBody.Part, +) { + private var callback: RequestCallbackReview? = null + + fun setEvent(block: RequestCallback.() -> Unit): TimeStampPostRequestReview { + callback = RequestCallbackReview().apply(block) + return this + } + + fun send(token: String?) { + MeaningService.getInstance() + .requestPostTimestamp( + token = token, + params = createPartMap(), + image = image + ).enqueue(callback ?: return) + } + + private fun createPartMap(): HashMap { + val partMap = HashMap() + partMap["dateTime"] = dateTime.toRequestBody(MEDIA_TYPE_TEXT) + partMap["timeStampContents"] = timeStampContent.toRequestBody(MEDIA_TYPE_TEXT) + return partMap + } + + companion object { + private val MEDIA_TYPE_TEXT = "text/plain".toMediaType() + } +} From a6ddb746e32110594f3affe36e833a5ba92c98ef Mon Sep 17 00:00:00 2001 From: jinsu4755 Date: Sun, 17 Jan 2021 02:54:14 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[upload]=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 너무 피곤해서 커밋 막적음 ㅈㅅ --- .../morning/network/request/TimeStampPostRequestReview.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt b/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt index fb573b0..469a46a 100644 --- a/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt +++ b/app/src/main/java/meaning/morning/network/request/TimeStampPostRequestReview.kt @@ -19,7 +19,7 @@ class TimeStampPostRequestReview( ) { private var callback: RequestCallbackReview? = null - fun setEvent(block: RequestCallback.() -> Unit): TimeStampPostRequestReview { + fun setEvent(block: RequestCallbackReview.() -> Unit): TimeStampPostRequestReview { callback = RequestCallbackReview().apply(block) return this }