@korner-brazers

Android как отправить пост запрос?

Всем привет, пытаюсь отправить пост запрос на сервер средствами андроид. 1000 вариантов и только единицы удается запустить.

Нашел библиотеку Fuel, якобы бест оф зе бест)) Вот небольшой пример их кода.

Fuel.post("https://httpbin.org/post")
    .jsonBody("{ \"foo\" : \"bar\" }")
    .also { println(it) }
    .response { result -> }


Сделал тестовый файлик на php

<?
print_r($_POST);
?>


Ответ возвращает пустой Array()

Уже перепробовал все варианты:

.jsonBody("{ \"foo\" : \"bar\" }")
 .jsonBody("foo=bar")
 .body("{ \"foo\" : \"bar\" }")
 .body("foo=bar")


Не чего не помогает, подумал ну ладно, черт с ней этой либой, сделаем как-то средствами андроида.

fun sendPostRequest(userName:String, password:String) {

        var reqParam = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(userName, "UTF-8")
        reqParam += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8")
        val mURL = URL("http://.../test.php")

        with(mURL.openConnection() as HttpURLConnection) {
            // optional default is GET
            requestMethod = "POST"

            val wr = OutputStreamWriter(getOutputStream());
            wr.write(reqParam);
            wr.flush();

            Log.i(App.TAG,"URL : $url")
            Log.i(App.TAG,"Response Code : $responseCode")

            BufferedReader(InputStreamReader(inputStream)).use {
                val response = StringBuffer()

                var inputLine = it.readLine()
                while (inputLine != null) {
                    response.append(inputLine)
                    inputLine = it.readLine()
                }
                Log.i(App.TAG,"Response : $response")
            }

            wr.close()
        }
    }


Код работает, запрос отправляет как надо, но есть одно большое НО! Код синхронный, на момент отправки все виснит, пытался сделать асинхронный, но видать не судьба на котлине это сделать, я не нашел рабочего примера как это сделать.

Библиотеки что использую

dependencies {
    implementation 'androidx.leanback:leanback:1.0.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.work:work-runtime-ktx:2.5.0'
    implementation 'androidx.tvprovider:tvprovider:1.0.0'
    implementation 'androidx.preference:preference-ktx:1.1.1'


    //Update
    implementation 'com.g00fy2:versioncompare:1.2.8'

    //Network
    implementation "com.google.code.gson:gson:2.8.6"
    implementation 'com.github.kittinunf.fuel:fuel:2.3.1'
    implementation 'com.github.kittinunf.fuel:fuel-gson:2.3.1'
}
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ответы на вопрос 1
Jacen11
@Jacen11
Вообще-то все ретрофит используют.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы