Простейший POST-запрос Java Android
Есть мобильное приложение для Android, написанное на Java. Требуется отправить из него данные php-скрипту методом POST. В формате json передавать необязательно, если можно обойтись без него. Примеров вроде много, но в основном они устаревшие и очень громоздкие. Прошу привести самый простейший пример для решения этой задачи. Были попытки сделать как описано здесь, запрос проходит, но пустой. В php принимаю вот так:
$info = json_decode(file_get_contents('php://input'), true);
$param1 = $info["param1"];
Далее данные отправляются в БД и там везде нули.
Ответы (1 шт):
Самый простой способ (для примера и без использования json) - использовать библиотеку okhttp
Подключаем к проекту:
implementation 'com.squareup.okhttp3:okhttp:3.12.12' // если не нужна поддержка android 4, можно использовать версии 4.8.0 +
Пишем метод, который будет обращаться к серверу в интернете, в отдельном (не UI) потоке, например действие по кнопке:
public void postQueryExample(View view){
new Thread(new Runnable() {
@Override
public void run() {
String myString="данные которые будет принимать и обрабатывать сервер";
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("param1", myString)
.add("param2", "другие данные для примера")
.build();
Request request = new Request.Builder()
.url("https://example.com/postquery.php")
.post(formBody)
.build();
try {
Response response = okHttpClient.newCall(request).execute();
String stringResponse = response.body().string(); //в этой переменной будет ответ сервера
} catch (IOException e) {
Log.e(TAG, "Exception: "+Log.getStackTraceString(e));
}
}
}).start();
}
Запрос должен обязательно идти через https - иначе, нужно прописывать usesCleartextTraffic
PHP
postquery.php:
if (isset($_POST['param1'])){
$param1 = $_POST['param1']; //сначала нужно получить данные, а после обрабатывать, например json_decode
echo 'param1='.$param1;
if ( isset($_POST['param2'])){
echo 'param2='.$_POST['param2'];
}
// и т.д.
}
else {
echo "param1 is empty";
}