@che_ta

Как наладить метод POST из Java в скрипт php?

Цель: мне нужно отправить поле id из AndroidStudio в скрипт php, а после, исходя из id, вернуть нужную строку бд. Создал класс для подключения к бд, если не использовать id, то информация возвращается. Я думаю, что я как-то не так пишу POST

Класс для подключения:
package com.example.maybe;

import android.content.Context;
import android.os.AsyncTask;
import android.text.Html;
import android.widget.TextView;

import androidx.loader.content.AsyncTaskLoader;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class GetData extends AsyncTask<String, Void, String > {
    private Context context;
    private TextView text;
    private int id = 1;

    public GetData(Context context, TextView text, int day){
        this.context= context;
        this.text = text;
        this.id = day;
    }
    protected void onPreExecute(){

    }
    @Override
    protected String doInBackground(String... arg0){
        try {
            String link ="https://bdforandroid.000webhostapp.com/getBD.php";
            String data = URLEncoder.encode("id", "UTF-8") + "-" +id;
            URL url = new URL(link);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);

            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

            wr.write(data);
            wr.flush();

            BufferedReader reader = new BufferedReader(new
                    InputStreamReader(conn.getInputStream()));

            StringBuilder sb = new StringBuilder();
            String line = null;

            while ((line = reader.readLine()) != null){
                sb.append(line);
                break;
            }
            return sb.toString();
        } catch (Exception e){
            return new String("Exception: " + e.getMessage());
        }
    }
    @Override
    protected void onPostExecute(String result){
        this.text.setText(Html.fromHtml(result));
    }
}


Скрипт php:
$con=mysqli_connect("localhost", "id16937257_cheta", "d0VALqS!8%q~kYXh", "id16937257_bdforandroid");
    $id = $_POST['id'];
    $result = mysqli_query($con,"SELECT `date` FROM `holidays` WHERE `id` = $id");
    $row = mysqli_fetch_array($result);
    $data = $row[0];
    echo $data;
    mysqli_close($con);
  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.

мне нужно отправить поле id из AndroidStudio

Ну во-первых, Android Studio это всего лишь редактор. А отправлять запрос вы будете например, из мобильного приложения.

Во-вторых, ну можете например, глянуть на этот ответ - https://stackoverflow.com/questions/2938502/sendin...
Тут написано, как выполнить POST запрос. Можно также глянуть в сторону применения библиотек OkHttp или Retrofit.

Создал класс для подключения к бд,

Скорее вы выполняете REST запрос, а не подключаетесь к БД. Для подключения к БД нужно использовать jdbc, что в вашем случае не нужно. Достаточно выполнить POST запрос к REST сервису.

Предположу, что у вас тут может быть ошибка:
String link ="https://bdforandroid.000webhostapp.com/getBD.php";
            String data = URLEncoder.encode("id", "UTF-8") + "-" +id;

Например, тире лишнее перед id

если не использовать id, то информация возвращается

А вот, тут явно ожидается некое id на вход
$id = $_POST['id'];
    $result = mysqli_query($con,"SELECT `date` FROM `holidays` WHERE `id` = $id");
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы