Closed6

android で http request

tkttkt
import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody


object OkHttp {
    private val Json: MediaType = "application/json; charset=utf-8".toMediaType()
    private val client = OkHttpClient()

    fun buildRequestBody(body: String, mediaType: MediaType = Json): RequestBody {
        return body.toRequestBody(mediaType)
    }
    fun buildRequest(url: String): Request {
        return Request.Builder()
            .url(url)
            .build()
    }
    fun buildPostRequest(url: String, requestBody: RequestBody): Request {
        return Request.Builder()
            .url(url)
            .post(requestBody)
            .build()
    }
    fun execute(request: Request): String? {
        val response = client.newCall(request).execute()
        return response.body?.string()
    }
}
tkttkt
class HttpClient {
    fun get(url: String): String? {
        val request = OkHttp.buildRequest(url)
        return OkHttp.execute(request)
    }
    fun post(url: String, body: String): String? {
        val requestBody = OkHttp.buildRequestBody(body)
        val request = OkHttp.buildPostRequest(url, requestBody)
        return OkHttp.execute(request)
    }
}
tkttkt
interface Response {
    fun isSuccessful(): Boolean
    fun getCode(): Int
    fun getBody(): String?
}

class HttpClient {
    fun get(url: String): Response {
        val request = OkHttp.buildRequest(url)
        return OkHttp.execute(request)
    }
    fun post(url: String, body: String): Response {
        val requestBody = OkHttp.buildRequestBody(body)
        val request = OkHttp.buildPostRequest(url, requestBody)
        return OkHttp.execute(request)
    }
}

interface を切って okHttp との依存をこのレイヤーまでで切る

tkttkt
import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody


object OkHttp {
    private val Json: MediaType = "application/json; charset=utf-8".toMediaType()
    private val client = OkHttpClient()

    fun buildRequestBody(body: String, mediaType: MediaType = Json): RequestBody {
        return body.toRequestBody(mediaType)
    }
    fun buildRequest(url: String): Request {
        return Request.Builder()
            .url(url)
            .build()
    }
    fun buildPostRequest(url: String, requestBody: RequestBody): Request {
        return Request.Builder()
            .url(url)
            .post(requestBody)
            .build()
    }
    fun execute(request: Request): OkHttpResponse {
        return OkHttpResponse(client.newCall(request).execute())
    }
}

class OkHttpResponse(private val response: okhttp3.Response): Response {
    override fun isSuccessful(): Boolean {
        return response.isSuccessful
    }
    override fun getCode(): Int {
        return response.code
    }
    override fun getBody(): String? {
        return response.body?.toString()
    }
}

OkHttp -> HttpClient で依存させる

このスクラップは2021/03/14にクローズされました