我正在尝试从Android发出POST请求,以在phpmyadmin
中插入一些信息。
我正在使用
Slim
与phpmyadmin存储的数据库进行连接和查询。 Slim post函数对我没有任何问题,因为如果我在Postman应用程序上使用POST
模式,数据就会正确地插入到数据库中。
网址可以接受由斜杠/
分隔的两个参数。这里有一个例子:
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
方法。
我检查了什么
我注意到我在网址上使用的是以太网适配器IP而不是WIFI。
现在我可以在智能手机浏览器XAMPP默认网页上看到如果我在网址上设置http://192.168.x.x
(我的WIFI的IP),但我仍然遇到上面提到的问题,因为如果我设置了http://192.168.x.x:8000/insert/Peter/25
智能手机无法识别网址。
我认为问题可能是因为我使用内置的PHP服务器Slim documentation
建议。我使用以下命令:
php -S localhost:8000
所以我认为问题可以在这里生成,但我不知道如何解决它。
我错过了什么?
提前致谢!
答案 0 :(得分:5)
最后我注意到我的问题是什么。我将分享我所挣扎的观点。
首先,我不需要使用内置的PHP服务器,因为它不是必需的。
其次,最重要的是,我还必须在网址上使用存储Slim函数的文件名(我创建的自定义函数)。
第三,我必须使用运行XAMPP的计算机的IP,以便移动电话可以访问它而不是localhost
(指的是移动设备的localhost
电话,所以它永远不会工作)。
第四,两台设备(手机和电脑)都连接到同一个WIFI网络,因此当您在计算机上运行XAMPP时,手机可以访问它。
所以我必须使用的最终网址是:
http://192.168.x.x/application/index.php/insert/Peter/25
您必须将192.168.x.x
替换为计算机WIFI网络的IP,将application
替换为您使用的文件夹名称Slim
。
答案 1 :(得分:4)
你也可以这样做
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;
}
);
答案 2 :(得分:3)
您正在将内部PHP网络服务器绑定到localhost
即。 127.0.0.1
。无法从任何外部设备访问它。要将PHP Web服务器绑定到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
中运行PHP网络服务器,否则无法连接到localhost:8000
。
答案 3 :(得分:2)
而不是将名称和年龄传递给网址,而不是像这样传递它们(为此,在您的网络服务中进行了充分的更改)
@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
答案 4 :(得分:1)
localhost可用于启动xampp的同一系统。 如果你想通过Android手机等其他设备连接它,你需要输入公共IP地址,转到命令提示符并输入
ipconfig
检查公共IP的IPv4地址。