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

时间:2017-02-19 02:53:17

标签: android slim

我正在尝试从Android发出POST请求,以在phpmyadmin中插入一些信息。

我正在使用

  • Slim与phpmyadmin存储的数据库进行连接和查询。
  • XAMPP模拟本地服务器。
  • Volley使用Android的请求。

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方法。

我检查了什么

  • 我运行XAMPP的计算机与智能手机的WIFI相同。
  • 更改localhost以获取计算机的IP也不会改变结果。

更新

我注意到我在网址上使用的是以太网适配器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

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

我错过了什么?

提前致谢!

5 个答案:

答案 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地址。