为什么我的 StringRequest 总是在 onErrorResponse 方法上运行?
Why my StringRequest is going always at onErrorResponse method?
我正在尝试执行来自 Android 的 POST 请求,以便在我的 phpmyadmin
中插入一些信息。
我在用什么
Slim
与存储在 phpmyadmin 的数据库建立连接和查询。
- XAMPP 模拟本地服务器。
- Volley 消耗来自 Android 的请求。
Slim post 函数不会给我带来任何问题,因为如果我在 Postman 应用程序上以 POST
模式使用它,数据就会正确地插入到数据库中。
url可以接受两个用斜杠分隔的参数/
。举个例子:
http://localhost:8000/insert/Peter/25
我在数据库中插入了一个名为 Peter、年龄为 25 岁的新用户。
当我尝试使用 Volley 从 Android 调用相同的 url 时出现问题,因为它总是转到 onErrorResponse
方法。
这是我必须使用来自 Android 的请求的代码:
RequestQueue queue = Volley.newRequestQueue(getContext());
String url = "http://localhost:8000/insert/" + name + "/" + age;
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Log.d("Response", "works well");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Response", "" + error.getMessage());
}
}
);
queue.add(postRequest);
但它总是转到 onErrorResponse
方法。
我检查了什么
- 我的XAMPP 运行电脑和智能手机在同一个WIFI
- 为我的计算机的 IP 更改 localhost 也不会更改结果。
更新:
我注意到我在 url 上使用以太网适配器的 IP 而不是 WIFI。
如果我在 url 上设置 http://192.168.x.x
(我的 WIFI 的 IP),现在我可以在智能手机浏览器 XAMPP 上看到默认网页,但我仍然遇到上面提到的问题因为如果我设置 http://192.168.x.x:8000/insert/Peter/25
智能手机无法识别 url。
我认为问题可能是因为我按照 Slim documentation
的建议使用了内置的 PHP 服务器。我使用以下命令:
php -S localhost:8000
所以我认为问题可能会在这里产生,但我不确定如何解决。
我错过了什么?
提前致谢!
与其将姓名和年龄传递给 url,不如像这样传递它们(为此对您的 Web 服务进行足够的更改)
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Atif");
params.put("age", "27");
return params;
}
查看详细示例here
你也可以这样做
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Log.d("Response", "works well");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Response", "" + error.getMessage());
}
}
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Atif");
params.put("age", "27");
return params;
}
);
您正在将内部 PHP 网络服务器绑定到 localhost
即。 127.0.0.1
。无法从任何外部设备访问它。要将 PHP 网络服务器绑定到 192.168.x.x
的外部 IP 地址,请使用
启动它
$ php -S 192.168.x.x:8000
请务必将 .x.x
部分替换为您的 IP 地址的实际数字。您还必须确保您的 Android 设备连接到同一 192.168.x
网络。
完成后,您的 Android 设备应向 192.168.x.x:8000
发出请求。现在它正在尝试连接到 localhost
即。本身。
除非您是 运行,否则您 Android 设备端口 8000
中连接到 localhost:8000
的 PHP 网络服务器将无法工作。
终于我注意到了我的问题所在。我将分享我努力解决的问题。
首先,我不需要使用内置的PHP服务器,因为它不是必需的。
其次,也是最重要的一点,我还必须在 url 上使用存储 Slim 函数(我创建的自定义函数)的文件的名称.
第三,我必须使用 XAMPP 是 运行ning 的计算机的 IP,以便手机 phone 可以访问它而不是localhost
(指的是手机 phone 的 localhost
,所以它永远不会工作)。
第四,两个设备(手机phone和电脑)都连接到同一个WIFI网络,所以当你运行你的电脑XAMPP手机 phone 可以访问它。
所以我必须使用的最终 url 是:
http://192.168.x.x/application/index.php/insert/Peter/25
您必须将 192.168.x.x
替换为计算机 WIFI 网络的 IP,将 application
替换为您正在使用的文件夹的名称 Slim
。
localhost 可用于启动 xampp 的同一系统。
如果您想通过 android phone 等其他设备连接它,您需要输入 Public IP 地址,转到命令提示符并键入
ipconfig
检查 public IP 的 IPv4 地址。
我正在尝试执行来自 Android 的 POST 请求,以便在我的 phpmyadmin
中插入一些信息。
我在用什么
Slim
与存储在 phpmyadmin 的数据库建立连接和查询。- XAMPP 模拟本地服务器。
- Volley 消耗来自 Android 的请求。
Slim post 函数不会给我带来任何问题,因为如果我在 Postman 应用程序上以 POST
模式使用它,数据就会正确地插入到数据库中。
url可以接受两个用斜杠分隔的参数/
。举个例子:
http://localhost:8000/insert/Peter/25
我在数据库中插入了一个名为 Peter、年龄为 25 岁的新用户。
当我尝试使用 Volley 从 Android 调用相同的 url 时出现问题,因为它总是转到 onErrorResponse
方法。
这是我必须使用来自 Android 的请求的代码:
RequestQueue queue = Volley.newRequestQueue(getContext());
String url = "http://localhost:8000/insert/" + name + "/" + age;
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Log.d("Response", "works well");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Response", "" + error.getMessage());
}
}
);
queue.add(postRequest);
但它总是转到 onErrorResponse
方法。
我检查了什么
- 我的XAMPP 运行电脑和智能手机在同一个WIFI
- 为我的计算机的 IP 更改 localhost 也不会更改结果。
更新:
我注意到我在 url 上使用以太网适配器的 IP 而不是 WIFI。
如果我在 url 上设置 http://192.168.x.x
(我的 WIFI 的 IP),现在我可以在智能手机浏览器 XAMPP 上看到默认网页,但我仍然遇到上面提到的问题因为如果我设置 http://192.168.x.x:8000/insert/Peter/25
智能手机无法识别 url。
我认为问题可能是因为我按照 Slim documentation
的建议使用了内置的 PHP 服务器。我使用以下命令:
php -S localhost:8000
所以我认为问题可能会在这里产生,但我不确定如何解决。
我错过了什么?
提前致谢!
与其将姓名和年龄传递给 url,不如像这样传递它们(为此对您的 Web 服务进行足够的更改)
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Atif");
params.put("age", "27");
return params;
}
查看详细示例here
你也可以这样做
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Log.d("Response", "works well");
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Response", "" + error.getMessage());
}
}
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("name", "Atif");
params.put("age", "27");
return params;
}
);
您正在将内部 PHP 网络服务器绑定到 localhost
即。 127.0.0.1
。无法从任何外部设备访问它。要将 PHP 网络服务器绑定到 192.168.x.x
的外部 IP 地址,请使用
$ php -S 192.168.x.x:8000
请务必将 .x.x
部分替换为您的 IP 地址的实际数字。您还必须确保您的 Android 设备连接到同一 192.168.x
网络。
完成后,您的 Android 设备应向 192.168.x.x:8000
发出请求。现在它正在尝试连接到 localhost
即。本身。
除非您是 运行,否则您 Android 设备端口 8000
中连接到 localhost:8000
的 PHP 网络服务器将无法工作。
终于我注意到了我的问题所在。我将分享我努力解决的问题。
首先,我不需要使用内置的PHP服务器,因为它不是必需的。
其次,也是最重要的一点,我还必须在 url 上使用存储 Slim 函数(我创建的自定义函数)的文件的名称.
第三,我必须使用 XAMPP 是 运行ning 的计算机的 IP,以便手机 phone 可以访问它而不是
localhost
(指的是手机 phone 的localhost
,所以它永远不会工作)。第四,两个设备(手机phone和电脑)都连接到同一个WIFI网络,所以当你运行你的电脑XAMPP手机 phone 可以访问它。
所以我必须使用的最终 url 是:
http://192.168.x.x/application/index.php/insert/Peter/25
您必须将 192.168.x.x
替换为计算机 WIFI 网络的 IP,将 application
替换为您正在使用的文件夹的名称 Slim
。
localhost 可用于启动 xampp 的同一系统。 如果您想通过 android phone 等其他设备连接它,您需要输入 Public IP 地址,转到命令提示符并键入
ipconfig
检查 public IP 的 IPv4 地址。