【发布时间】:2017-03-22 00:30:56
【问题描述】:
我正在尝试将数据从本地服务器获取到 Android 设备,我使用的是免费的在线托管服务,在遇到一些不相关的技术问题之前一切正常,因此问题不太可能出在代码本身(只是一个想法)。无论如何,当我使用 XAMPP 迁移到本地服务器时,我的应用程序没有收到任何响应,我从手机浏览器访问了 php 文件,它给出了正确的结果,但应用程序本身完全没有声音。通过 SO 搜索,大多数问题都提到在文件的 URL 中放置正确的 IP 地址。我正在使用 volley,并且我插入了与我在浏览器中访问文件时完全相同的 URL,服务器似乎根本没有响应。
这是我正在使用的 php 代码:
<?php
include 'dbConnect.php';
$searchTerm='d';
$query = $conn->prepare('SELECT term,id FROM tag WHERE term LIKE :searchTerm');
$query->execute(array(':searchTerm'=>$searchTerm.'%'));
$result=$query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(array('result'=>$result));
?>
我正在使用 Volley 库来联系服务器,第一个文件是 CustomeAutoCompleteTextViewTextChangedListener.java
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
NetworkRequsts networkRequsts = new NetworkRequsts(context);
networkRequsts.tagsJsonObjectRequest("https://192.168.110.1:8080/Register.php");
}
catch (Exception e)
{
e.printStackTrace();
}
}
这是应该发出请求的地方,注意 URL,这是我认为问题所在,因为这是我在更改服务器时在代码中更改的唯一内容。
这是 Volley 请求:
NetworkRequsts.java
JsonObjectRequest tagJsonRequest=new JsonObjectRequest(url,tagSearchObject, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("Search term object",tagSearchObject.toString());
Log.d("respone Test", response.length()+" "+response.toString());
JASONArrayResponse=response.getJSONArray("result");
for(int i=0;i<JASONArrayResponse.length();i++)
{
JSONObject jsonObject=JASONArrayResponse.getJSONObject(i);
Log.d("Volley", jsonObject.getString("term"));
Log.d("searchTerm",register.tagsAutoCompleteTextView.getText().toString());
}
}
catch(JSONException JE)
{
JE.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof ServerError) {
Log.e("Volley", "ServerError");
Toast.makeText(context.getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
【问题讨论】:
-
为了通过 XAMPP 成功运行应用程序,您需要保持 IP 地址与服务器运行的系统 IP 地址相同,并且系统和移动设备都应连接到同一网络。所以交叉检查这些点。您可能在这里遗漏了一些东西。
-
使用
https和端口8080可能会导致问题。 -
the server doesn't seem to respond at all.什么意思?在 onResponse() 和 onErrorResponse() 你应该放置更多的日志语句。你没有涵盖所有的可能性。 -
应用程序没有调用任何异常,log.d 应该显示从服务器获取的 JSON 数组,但日志没有显示任何内容,只是我输入的字符,仅此而已