为什么我的StringRequest总是在onErrorResponse方法?

我正在试图从Android的POST请求插入一些信息在我的phpmyadmin

我正在使用什么

  • 修改连接并使用存储在phpmyadmin中的数据库进行查询。
  • XAMPP来模拟本地服务器。
  • 凌乱地消耗Android的请求。

Slim post函数对我来说没有任何问题,因为如果我在邮递员应用程序上使用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我的电脑也不会改变结果。

更新:

我注意到,我使用的是以太网适配器的IP而不是WIFI的URL。

现在我可以在智能手机浏览器XAMPP的默认网页上看到,如果我设置http://192.168.xx (我的WIFI的IP)上的url,但我仍然有上面提到的问题,因为如果我设置http://192.168.xx:8000/insert/Peter/25的url是无法识别的智能手机。

我认为这个问题可能是因为我使用内置的PHP服务器,正如Slim documentationbuild议的那样。 我使用以下命令:

 php -S localhost:8000 

所以我认为这个问题可以在这里产生,但我不知道如何解决它。

我错过了什么?

提前致谢!

Solutions Collecting From Web of "为什么我的StringRequest总是在onErrorResponse方法?"

最后我注意到我的问题是什么。 我将分享我努力的要点。

  • 首先,我不需要使用内置的PHP服务器,因为它不是必需的。

  • 其次,也是最重要的是,我还必须使用存储Slim函数的文件的名称(我创build的自定义函数)。

  • 第三,我必须使用运行XAMPP的计算机的IP,以便手机可以访问它而不是localhost (这涉及到手机localhost ,所以它永远不会工作)。

  • 第四,这两个设备(手机和电脑)连接到同一个WIFInetworking,所以当你在你的电脑上运行你的XAMPP手机可以访问它。

所以我不得不使用的最后一个url是:

 http://192.168.xx/application/index.php/insert/Peter/25 

你必须用你电脑和application的WIFInetworking的IP地址replace192.168.xx ,并用你使用Slim的文件夹的名称。

你也可以这样做

 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; } ); 

你正在绑定内部的PHPnetworking服务器localhost ie。 127.0.0.1 。 它不能从任何外部设备访问。 绑定PHPnetworking服务器到您的外部IP地址192.168.xx启动它。

 $ php -S 192.168.xx:8000 

请务必将.xx部分replace为您的IP地址的实际数字。 您还必须确保您的Android设备连接到相同的192.168.xnetworking。

完成此操作后,您的Android设备应该向192.168.xx:8000发出请求。 现在它试图连接到localhost即ie。 本身。

除非你在你的Android设备端口8000上运行PHP webserver,否则连接到localhost:8000将不起作用。

而不是通过名称和年龄传递给他们像这样(为此,您的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; } 

请看这里的详细例子

localhost可以用于xampp启动的同一系统。 如果你想通过其他设备如android手机连接它,你需要把公共IP地址,转到命令提示符,然后键入

IPCONFIG

检查公共IP的IPv4地址。