• 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
95 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,059 wizyt
pytanie zadane 31 marca 2018 w Android, Swift, Symbian przez Jasnygwint Początkujący (330 p.)
0 głosów
2 odpowiedzi 198 wizyt
pytanie zadane 12 marca 2018 w Inne języki przez Partyjny Obywatel (1,180 p.)
0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 5 lutego w Inne języki przez Shape1 Nowicjusz (120 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

61,401 zapytań

107,348 odpowiedzi

223,565 komentarzy

33,276 pasjonatów

Przeglądających: 317
Pasjonatów: 18 Gości: 299

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.

...