我正在创建一个应用程序,它将在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);
?>
当我使用浏览器运行此PhP文件时,我得到的输出正确为JSON array
:
但是如果我使用模拟器在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();
我做了很长时间的研究,请有人帮助我。
答案 0 :(得分:0)
java.net.SocketTimeoutException: connect timed out
表示您无法连接到所需的服务器。
我想对于模拟器你必须替换
http://10.10.2.2/
到
localhost/