Httpconnection не будет открывать ссылку должным образом - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть приложение, которое довольно просто.При подготовке словаря предполагается взять слова и ввести их в базу данных.Входная часть выполняется PHP-скриптом, который работает нормально.Работающая ссылка тоже работает, пробовал вручную.Могу я спросить, что я просмотрел в этом коде, поскольку я не нашел ничего, учитывая тему в Google:

    private class SendData extends AsyncTask<Void, Void, Void>{
    @Override
    protected Void doInBackground(Void... voids) {
        HttpURLConnection urlConnection = null;
        try {
            URL url = new URL(uri.toString());
            EditText text = (EditText) findViewById(R.id.oshikwanyamaEx);
            text.setText(url.toString());
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("POST");
            urlConnection.connect();
        }catch (MalformedURLException m){
            m.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if (urlConnection != null){
                urlConnection.disconnect();
            }
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Toast.makeText(MainActivity.this, "Data was sent", Toast.LENGTH_LONG).show();
        super.onPostExecute(aVoid);
    }
}

Заранее спасибо Это код PHP:

<?php 

    //Creating a connection
    $con = mysqli_connect("breidinga.lima-db.de:3306","USER373834","*********","db_373834_1");

    if (mysqli_connect_errno())
    {
       echo "Failed to connect to MySQL: " . mysqli_connect_error();
    } 
    //INSERT INTO `ENGOKY` (`_id`, `eng`, `oky`, `type`, `engex`, `okyex`, `okypl`, `engpl`) VALUES (NULL, '', '', '', NULL, NULL, NULL, NULL)
    $sql = "INSERT INTO `ENGOKY` (`_id`, `eng`, `oky`, `type`, `engex`, `okyex`, `okypl`, `engpl`) VALUES (NULL,'".$_GET["eng"]."', '";
    //$sql = $sql.$_GET["oky"]."', '".$_GET["type"]."', '".$_GET["engex"]."', '".$_GET["okyex"]."', '".$_GET["okyex"]."', '".$_GET["ekypl"]."', '".$_GET["engpl"]."')";
$sql = $sql.$_GET["oky"]."', '".$_GET["type"]."', NULL, NULL, NULL, NULL)";
  $sql = str_replace("''","NULL", $sql);
    mysqli_query($con ,$sql);
    mysqli_free_result($result);
    mysqli_close($con);
 ?>

1 Ответ

0 голосов
/ 29 сентября 2018

Небольшое улучшение вашего кода и еще одно объявление

        URL url = new URL("your URL here");

        JSONObject postDataParams = new JSONObject();
        postDataParams.put("word", "onomatopoeia"); //Change #1
        Log.e("params",postDataParams.toString());

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000); //Change #2
        conn.setConnectTimeout(15000); //Change #2
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);

         OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostDataString(postDataParams));

            writer.flush();
            writer.close();
            os.close();

1 - вам нужно передать параметры в ваш PHP-файл, так как я не вижу никаких доказательств того, что что-то было передано.переменная похожа на следующую: -

$word= $_POST['word'];

2 - Всегда полезно установить время ожидания соединения и время ожидания чтения, поскольку это приведет к прекращению запроса через некоторое время.В этом случае это 15 секунд.

3 - В качестве руководства просто убедитесь, что есть ответный ответ из файла PHP, поскольку вы хотите убедиться, что вставка прошла успешно или нет.

4 - Добавьте следующее разрешение, может иметь значение

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

5 - Прочитайте код ответа от соединения, и это определит, если оно вообще что-то беспокоило.

int response = conn.getResponseCode();
        Log.d(DEBUG_TAG, "Response code is: " + response);

        if ((response >= 200) && (response < 300)) {
            Log.d(DEBUG_TAG, "The response is: " + conn.getResponseMessage());
        }

6.Пользователь получает код ответа 301 (Перенаправление) и добавляет эту строку, чтобы прекратить перенаправление

conn.setInstanceFollowRedirects(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...