ANDROID и PHP — Как отобразить JSONArray из MySQL с помощью PHP

#java #php #android #mysql #json

#php #Android #mysql

Вопрос:

Код, который я использую для отображения значения таблицы в JSONArray, приведен ниже

send_data.php

 <?php
include 'dbconfig.php';
$con = new mysqli($servername, $username, $password, $dbname);
if (mysqli_connect_errno())
  {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $query = "select id,ask from pertanyaan";

  $result = mysqli_query($con,$query);

  $rows = array();
  while($r = mysqli_fetch_array($result)) {
    $rows[] =$r;
  }
echo json_encode(array_values($rows));

  mysqli_close($con);
?>
  

и вывод JSONArray выглядит так

[{"0":"1","id":"1","1":"pertanyaan ke 1","ask":"pertanyaan ke 1"},{"0":"2","id":"2","1":"pertanyaan ke 2","ask":"pertanyaan ke 2"},{"0":"3","id":"3","1":"pertanyaan ke 3","ask":"pertanyaan ke 3"},{"0":"4","id":"4","1":"pertanyaan ke 4","ask":"pertanyaan ke 4"},{"0":"5","id":"5","1":"pertanyaan ke 5","ask":"pertanyaan ke 5"}]

но каждый раз, когда я пытаюсь отобразить этот URL в Android, я получаю сообщение об ошибке, в котором говорится

Value <html><body<>script of type java.lang.String cannot be converted to JSONArray

но когда я создаю новый API с тем же выводом здесь в Android Studio, он работает нормально,

я использовал неправильный код для кодирования JSON из PHP?

Комментарии:

1. Как вы получаете доступ к URL в Android? WebView в вашем приложении? Через приложение для браузера?

2. @MikeM. о, извините, сэр, если я уже нарушаю правила, я просто предложил задать новый вопрос о php-коде, @FredericKlein я пытаюсь отобразить это все значение в TextView сэр

3. zxccvvv.cuccfree.com/send_data.php требуется перенаправление на JavaScript http://www. , попробуйте использовать его http://www.zxccvvv.cuccfree.com/send_data.php в вашем запросе.

4. итак, мне просто нужно добавить / включить JavaScript в мою папку хостинга, сэр?

5. Для этого простого запроса вы, вероятно, не хотите использовать WebView или безголовый браузер с поддержкой JavaScript, просто избегайте перенаправления, вызывая напрямую http://www.zxccvvv.cuccfree.com/send_data.php

Ответ №1:

Проблема

HttpURLConnection не поддерживает JavaScript, но необходимый файл cookie генерируется с помощью JavaScript.

Ваш вызов

 String reqUrl = "http://zxccvvv.cuccfree.com/send_data.php";
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  

сбой, потому что отсутствует файл cookie __test .

Исправить

При первом взгляде на исходный код JavaScript файл cookie кажется постоянным для данного URL, поэтому может быть достаточно установить постоянный файл cookie:

 String cookie = "__test=2bf7c15501c0ec57f8e41cb84871a69c";

URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Cookie", cookie);
  

Альтернатива: Используя WebView, мы можем захватить файл cookie, так что это предпочтительный подход, поскольку он не сломается, если файл cookie изменится, и это не займет много времени:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getCookie();

    if(cookie!=null) {
        new GetContacts().execute();
    }
}

private void getCookie(){
    CookieManager.setAcceptFileSchemeCookies(true);
    WebView wv = new WebView(getApplicationContext());
    wv.getSettings().setJavaScriptEnabled(true);
    wv.loadUrl(url);
    cookie = CookieManager.getInstance().getCookie("zxccvvv.cuccfree.com");
}
  

и установите его, как в примере выше:

 conn.setRequestProperty("Cookie", cookie);
  

Вывод в logcat

 Response from url: [{"0":"1","id":"1","1":"pertanyaan ke 1","ask":"pertanyaan ke 1"},{"0":"2","id":"2","1":"pertanyaan ke 2","ask":"pertanyaan ke 2"},{"0":"3","id":"3","1":"pertanyaan ke 3","ask":"pertanyaan ke 3"},{"0":"4","id":"4","1":"pertanyaan ke 4","ask":"pertanyaan ke 4"},{"0":"5","id":"5","1":"pertanyaan ke 5","ask":"pertanyaan ke 5"}]
  

Комментарии:

1. извините за медленный ответ, я все еще не знаю, что означает ответ, приведенный выше, должен ли я попробовать код в Android Studio??

2. Да, я тестировал это на устройстве Android, подходы booth работают, хотя я бы предпочел подход WebView.

3. итак, мне просто нужно включить javascript между хостингом или Android sir?

4. Хост ( zxccvvv.cuccfree.com ) использует JavaScript для установки cookie, затем пересылает вам данные. Файл cookie кажется статичным, поэтому добавление файла cookie к вашему запросу позволяет вам запрашивать данные, минуя необходимость в JavaScript. В случае сбоя подхода (файл cookie может измениться), можно использовать WebView для запроса файла cookie.

5. Но когда я ищу, почти во всем руководстве используется webview для установки cookie, есть ли у вас простое кодирование, чтобы просто включить cookie? Или ваш ответ выше — правильный ответ для меня? Извините за вопрос noob, я такой новичок в Android Studio