• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Recenzja kodu Kotlin

0 głosów
104 wizyt
pytanie zadane 16 lipca 2018 w Android, Swift, Symbian przez KariK-02 Mądrala (6,060 p.)

Hej! Od pewnego czasu bawię się w Kotlinie i ostatnio napisałem taki prosty kod do łączenia się z REST Api i prosiłbym o ocenę jego oraz jakieś porady co zmienić by lepiej to wyglądało i działało 

Request.kt:

class Request(
        private val url : String,
        val data : ByteArray?,
        val type : RequestType = RequestType.GET,
        private val requestFeatures: IRequestFeatures?,
        private val headers : HashMap<String, String>?
) : AsyncTask<URL, Long, String>(), IRequest {

    private constructor(builder : Builder) : this(
            builder.url,
            builder.data,
            builder.type,
            builder.requestFeatures,
            builder.headers
    )

    override fun doInBackground(vararg params: URL?): String {

        requestFeatures?.doInBackground()

        val httpConnection = URL(url).openConnection() as HttpURLConnection

        var finalResponse = ""

        try {
            when(type) {
                RequestType.POST -> httpConnection.requestMethod = "POST"
                RequestType.PATCH -> httpConnection.requestMethod = "PATCH"
                RequestType.DELETE -> httpConnection.requestMethod = "DELETE"
                else -> httpConnection.requestMethod = "GET"
            }

            httpConnection.addRequestProperty("Content-Type", "application/json")
            httpConnection.addRequestProperty("Accept", "application/json")

            headers?.forEach {
                httpConnection.addRequestProperty(it.key, it.value)
            }

            finalResponse = streamToString(httpConnection.inputStream)


        } catch (e : Exception) {
            e.printStackTrace()
        } finally {
            httpConnection.disconnect()
        }

        return finalResponse
    }

    override fun onPostExecute(result: String?) {
        super.onPostExecute(result)

        requestFeatures?.onPostExecute(result)

    }

    override fun toString(): String {
        return "Request(url='$url', data=${Arrays.toString(data)}, type=$type)"
    }

    override fun streamToString(inputStream: InputStream): String {

        val bufferReader = BufferedReader(InputStreamReader(inputStream))
        var line: String
        var result = ""

        try {
            do {
                line = bufferReader.readLine()
                if (line != null) {
                    result += line
                }
            } while (line != null)
            inputStream.close()
        } catch (ex: Exception) {

        }

        return result
    }

    class Builder {

        var url : String = ""
            private set

        var data : ByteArray? = null
            private set

        var type : RequestType = RequestType.GET
            private set

        var requestFeatures : IRequestFeatures? = null
            private set

        var headers : HashMap<String, String>? = null

        fun url(url : String) = apply { this.url = url }

        fun data(data : ByteArray) = apply { this.data = data }

        fun type(type : RequestType) = apply { this.type = type }

        fun requestFeatures(requestFeatures : IRequestFeatures) = apply { this.requestFeatures = requestFeatures }

        fun headers(headers : HashMap<String, String>) = apply { this.headers = headers }

        fun build() = Request(this)
    }

}

IRequest.kt:

interface IRequest {
    fun streamToString(inputStream: InputStream) : String
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
2 odpowiedzi 1,164 wizyt
pytanie zadane 31 marca 2018 w Android, Swift, Symbian przez Jasnygwint Początkujący (330 p.)
0 głosów
2 odpowiedzi 208 wizyt
pytanie zadane 12 marca 2018 w Inne języki przez Partyjny Obywatel (1,180 p.)
0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 5 lutego w Inne języki przez Shape1 Nowicjusz (120 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

63,202 zapytań

109,437 odpowiedzi

228,621 komentarzy

42,957 pasjonatów

Przeglądających: 160
Pasjonatów: 4 Gości: 156

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...