Я пытаюсь получить данные из MySQL с моего сервера домена в приложение Android с помощью PHP - PullRequest
0 голосов
/ 06 сентября 2018

Попытка отобразить данные MySQL на моем сервере домена в приложении для Android с использованием PHP и отобразить мои данные в виде всплывающего сообщения. Всякий раз, когда я запускаю приложение, я получаю пустой тост. Далее, я буду использовать представление списка для отображения данных. В коде нет ошибок. Ниже приведен код для моей AsychTask:

class Connection extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            String result = "";
            String host = "http://prasaurus.com/conn.php";

            try {
                HttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet();
                request.setURI(new URI(host));
                HttpResponse response = client.execute(request);
                BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer stringBuffer = new StringBuffer("");

                String line = "";

                while ((line = reader.readLine()) != null ){
                    stringBuffer.append(line);
                    break;
                }

                reader.close();
                result = stringBuffer.toString();

            } catch (URISyntaxException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result){
            Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
        }

    }

Вот мой php-код на конце сервера:

<?php

$db_name = "prasauru_FAND_DB";
$mysql_username = "###########"; #database name on server end
$mysql_password = "###########"; #database password
$server_name = "prasaurus.com"; 

$conn = mysqli_connect($server_name, $mysql_username, $mysql_password, $db_name);

if(!$conn){
    die("Error in connection"  . mysqli_connect_error());
}

$response = array();

$query = "SELECT * FROM `under8_club_league` ORDER BY `points` DESC";
$result = mysqli_query($conn, $query);

if(mysqli_num_rows($result) > 0){
    while ($row = mysqli_fetch_assoc($result)){
        array_push($response , $row);
    }
}
else {
    $response['success'] = 0;
    $response['message'] = 'No data';
}

echo json_encode($response);    
mysqli_close($conn);

?>

Ответы [ 2 ]

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

Прежде всего, вы должны добавить интернет-разрешение в файле манифеста

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

затем код Java

public static JSONObject getJSONObjectFromURL(String urlString) throws IOException, JSONException {
    HttpURLConnection urlConnection = null;
    URL url = new URL(urlString);
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setRequestMethod("GET");
    urlConnection.setReadTimeout(10000 /* milliseconds */ );
    urlConnection.setConnectTimeout(15000 /* milliseconds */ );
    urlConnection.setDoOutput(true);
    urlConnection.connect();

    BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
    StringBuilder sb = new StringBuilder();

    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    }
    br.close();

    String jsonString = sb.toString();
    System.out.println("JSON: " + jsonString);

    return new JSONObject(jsonString);
}

И используйте функцию, как показано ниже

try{
      JSONObject jsonObject = getJSONObjectFromURL(urlString);
 // here you can use Jsonobject or Jsonarray as per your requirement.
        } catch (IOException e) {
              e.printStackTrace();
        } catch (JSONException e) {
              e.printStackTrace();
        }
0 голосов
/ 06 сентября 2018

Ваш код не работает. Во-первых, вам не нужно использовать break в этом цикле while.

И, во-вторых, если вы хотите получить результат в методе onPostExecute, вы должны вернуть его, а затем вернуть null.

Исправлен ваш код:

 class Connection extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            String result = "";
            String host = "http://prasaurus.com/conn.php";

            try {
                URL url = new URL(host);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuffer stringBuffer = new StringBuffer("");

                String line = "";

                while ((line = reader.readLine()) != null ){
                    stringBuffer.append(line);
                }

                reader.close();
                result = stringBuffer.toString();

            } catch (IOException e) {
                e.printStackTrace();
            }

            return result;
        }

Примечание: HttpClient больше не поддерживается в новых версиях Android, по этой причине я изменил это в коде.

Надеюсь, это поможет вам.

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