使用PhP在android和mysql之间建立连接时出错

时间:2017-06-02 13:14:10

标签: java php android mysql android-asynctask

我正在创建一个应用程序,它将在Android应用程序的card_layout中显示MySQL表的数据。

下面提到的是MainActivity.java中的连接代码

private void load_data_from_server(final int id) {
    AsyncTask<Integer,Void,Void> task = new AsyncTask<Integer, Void, Void>() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected Void doInBackground(Integer... params) {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url("http://10.10.2.2/develop/php_recyler_demo.php?id="+id).build();
            try {
                Response response = client.newCall(request).execute();

                JSONArray array = new JSONArray(response.body().toString());

                for (int i=0; i<array.length(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    MyData data = new MyData(object.getInt("id"),object.getString("description"),object.getString("image"));
                    data_list.add(data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            adapter.notifyDataSetChanged();
        }
    };
    task.execute(id);
}

对于MySQL连接我使用PhP并在XAMPP服务器中以localhost执行,代码如下:

<?php
    $connection = mysqli_connect("localhost","root","","test");

    //$id = $_GET["id"];
    $id = isset($_GET['id']) ? $_GET['id'] : '';

    $query = "select * from recyclerdb where id between ($id+1) and ($id+4)";

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

    while ($row = mysqli_fetch_assoc($result)) {
        # code...
        $array[] = $row;
    }

    header('Content-type:Application/json');
    echo json_encode($array);
?>

我的表格结构如下: The table structure

当我使用浏览器运行此PhP文件时,我得到的输出正确为JSON arrayImage for the output of PhP file in browser

但是如果我使用模拟器在android studio中执行我的应用程序

我正在java.net.SocketTimeoutException: connect timed out

我在MainActivity.java的两行中遇到的问题:

AsyncTask<Integer,Void,Void> task = new AsyncTask<Integer, Void, Void>()

Response response = client.newCall(request).execute();

我做了很长时间的研究,请有人帮助我。

1 个答案:

答案 0 :(得分:0)

java.net.SocketTimeoutException: connect timed out表示您无法连接到所需的服务器。

我想对于模拟器你必须替换

http://10.10.2.2/

localhost/