Получение данных JSON с сервера PHP - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь получить данные json из таблицы, которую я запрашиваю, на моем wamp-сервере с помощью select.php, данные отображаются в браузере, но Android по какой-то причине не может загрузить данные.

select.php

    <?php

$conn=mysqli_connect("localhost","root","", "shady") or die("Unable to connect");

if(mysqli_connect_error($conn)) {
    echo "Failed To Connect";
}

$qry = "SELECT * FROM `wellden`";

$res = mysqli_query($conn, $qry);

if ($res) {

    while ($row = mysqli_fetch_array($res)) {
        $flag[] = $row;
    }

    // returns tthe json data
echo json_encode($flag);


}


mysqli_close($conn);        


?>

отлично работает и печатает данные в браузере:

enter image description here

но по какой-то странной причине андроид не может получить отраженные данные из php-файла.

Код Android:

public class ListOfCourses extends AppCompatActivity {

ListView listView;
ArrayList<String> arrayList;
ArrayAdapter<String> arrayAdapter;
String REG_URL;



public class Listdata extends AsyncTask<String, Void, String>{


    HttpURLConnection conn;
    URL url;
    String jsonStringForMe;

    @Override
    protected String doInBackground(String... strings) {

        // MOST CRITICAL PART.....................................


        String s = strings[0];

        try {

            url = new URL(s);

            conn = (HttpURLConnection) url.openConnection();
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;

            // Read Server Response
            while ((line = reader.readLine()) != null) {
                // Append server response in string
                sb.append(line);
            }

            // Stroring it to use in the onPostExecute Cause we do not have any Button in this view
            jsonStringForMe = sb.toString();
            return  jsonStringForMe;





        }catch (Exception e){

            return e.getMessage();
        }


        // MOST CRITICA PART ENDS HERE..............................

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // JsonParsing Happens Here
        Toast.makeText(getApplicationContext(), jsonStringForMe+" ", Toast.LENGTH_LONG).show();

    }
}

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

    Listdata listdata = new Listdata();

    REG_URL="http://1.0.0.2/android_db_pool/select.php";
    listdata.execute(REG_URL);



}
}

, но каждый раз, когда jsonStringForMe выдает мне значение null в postExecute , кажется, все в порядке, должно работать, но по какой-то причине не работает. Что может быть причиной того, что данные json не получаются в конце Android?

EDIT Я также добавил интернет-разрешение:

Файл AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.slimshady.jamalsir1">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ListOfCourses"></activity>
    </application>

</manifest>

РЕДАКТИРОВАТЬ 2

Может показаться, что IP-адрес может быть проблемой, но это не вставка, которая отлично работает с insert.php, и я могу получить данные JSON с IP-адресом, который является IP-адресом моего сервера 1,0. 0,2 . В Android я использую IP-адрес сервера, а не localhost, только в php Я использую localhost , потому что файл php находится на моем сервере.

1 Ответ

0 голосов
/ 29 августа 2018

Как уже прокомментировано;

Создаем хранилище для использования в onPostExecute Потому что у нас нет Кнопка в этом представлении

Вы не добавили или не использовали метод json in onPostExecute(), но добавили Toast в onPreExecute.

Попробуйте добавить onPostExecute(), затем показать Toast.

защищенная пустота onPreExecute()

Запускается в потоке пользовательского интерфейса до doInBackground(Params...).

https://developer.android.com/reference/android/os/AsyncTask#onPreExecute%28%29

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