php - volley使用 - volley框架




排球POST字符串请求意外错误500 (8)

@Muhammad Faizan忽略您的疑问,问题 IS 500服务器错误

这是原因

  • POSTMAN和VOLLEY不同
  • a)您的PHP代码中存在错误, or B)暴露了一个环境设置

诊断PHP问题

并且您需要在php上打开 error_log 。 根据您的服务器,这可能很难解释,另一种方法是将 php.ini 更改为error_log以执行此操作,请在服务器上尝试

故意从这里抬起

/*This always works for me:*/

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/*However, this doesn't make PHP to show parse errors - the only way to show those errors is to modify your php.ini with this line:*/

display_errors = on
/*(if you don't have access to php.ini, then putting this line in .htaccess might work too):*/

php_flag display_errors 1

在服务器上诊断环境问题

如果 error_log 没有产生任何结果,请尝试 access_log 。 为什么? 因为它可能会显示传入的请求类型不同。并且POSTMAN和VOLLEY不相同

您需要潜在地查看您的 access_log ,并在单击邮递员然后单击截击客户端时实时观看

事实:(为什么我们可以这么确定)

我的直觉说您在配置错误的服务器中遇到问题。 不管您相信与否,在这种情况下,access_log将为您提供最大的帮助。

无论如何:在您放入POSTMAN中的内容和凌空客户端发送的内容之间显然存在一个问题-这是造成此问题的原因。

我所见的原因包括:

  • 可能是 SAME ORIGIN 错误。
  • 可能是 INTERNAL SERVER REDIRECT 问题。
  • 从$ _GET到$ _POST的不精确转发(我在nginx上看到了这个问题)
  • 这可能是一条糟糕的道路问题,正在被 no-redirect 和缺乏安全性所困扰。

但是如果不告诉我们平台或服务器(Windows,Linux,nginx,php-fpm,apache等),我们将无法为您提供帮助

我在项目中使用Volley库,并得到 Unexpected response code 500 作为响应。

我已经彻底搜索了stackoverflow,但仍然找不到有效的解决方案。

以下是我发出GET字符串请求的代码

        val API = "http://squadtechsolution.com/android/v1/allcompany.php"
        val requestQueue = Volley.newRequestQueue(mActivity)
        val stringRequest = StringRequest(
            Request.Method.GET,
            API,
            Response.Listener { response ->
                Log.i("dxdiag", response)
                mView.onFetchHttpDataResult(true)
                Toast.makeText(context, response, Toast.LENGTH_LONG).show()
            },
            Response.ErrorListener { error ->
                Toast.makeText(context, error.toString(), Toast.LENGTH_LONG).show()
                Log.i("dxdiag", error.printStackTrace().toString())
                mView.onFetchHttpDataResult(false)
            })
        requestQueue.add(stringRequest)

以下是堆栈跟踪

2019-09-03 17:15:53.237 3308-3892/com.squadtechs.markhor.foodapp 
E/Volley: [194] BasicNetwork.performRequest: Unexpected response code 
500 for 
http://squadtechsolution.com/android/v1/allcompany.php
2019-09-03 17:15:53.243 3308-3351/com.squadtechs.markhor.foodapp 
D/EGL_emulation: eglMakeCurrent: 0xa7d84180: ver 2 0 (tinfo 
0xa7d832b0)
2019-09-03 17:15:53.256 3308-3308/com.squadtechs.markhor.foodapp 
W/System.err: com.android.volley.ServerError
2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp 
W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:205)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

以下是我在服务器端编写的PHP代码:

<?php
    require 'db.php';

    $sql = "SELECT * FROM `company_profile`";
    $result = $con->query($sql);

    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        $id=$row['id']; 

        $company_name=$row['company_name'];
        $cuisine=$row['cuisine'];
        $conpany_phone=$row['conpany_phone'];
        $company_description=$row['company_description']; 
        $company_logo=$row['company_logo'];
        $company_type=$row['company_type'];
        $delivery_type=$row['delivery_type'];
        $delivery_range=$row['delivery_range']; 
        $delivery_fee=$row['delivery_fee'];
        $delivery_pickupinfo=$row['delivery_pickupinfo'];
        $address=$row['address'];

        $companyData[] = array('id'=> $id,'company_name'=> 
        $company_name,'cuisine'=> $cuisine,'conpany_phone'=> 
        $conpany_phone,'company_description'=> 
        $company_description,'company_logo'=> $company_logo,'company_type'=> 
        $company_type,'delivery_type'=> $delivery_type,'delivery_range'=> 
        $delivery_range,'delivery_fee'=> 
        $delivery_fee,'delivery_pickupinfo'=> $delivery_pickupinfo,'address'=> $address);   
    }
    echo $jsonformat=json_encode($companyData);
    } else {
        echo "0 results";
    }
    $conn->close();
?>

HTTP状态代码 500 代表 internal server error ,明确指出您在客户端没有任何问题(在本例中为 Volly ),但问题出在服务器端。 尝试调试您的服务器端php代码。 代码未正确执行,因此在Http响应标头中返回了 500 internal server errorVolly 只是将接收到的标头作为错误抛出。

如果您是后端开发人员,则应先与 REST Clients 一起尝试,然后再与移动应用程序集成。 您可以从 Here 获得一个。 您的API应该经过良好的测试,并且应该处于工作状态,否则您将始终收到错误消息。


以5开头的HTTP状态代码表明该错误是在服务器端。 代码500被解释为内部服务器错误,要解决此问题,您必须检查可能导致该错误的原因。 在这种情况下,可能是由于代码错误引起的,您可以打开error_log查看错误并采取相应措施。

原因可能是由于服务器功能暂时无法使用,例如访问数据库或具有多个同时打开的连接,而这些连接超过了相关的mysql资源。

在某些其他时间,该错误未登录到error_log文件中。 如果使用面板,请在主页的“度量”选项卡下,打开“错误”,然后根据您请求服务器的时间进行检查。 如果不使用cpanel,请查找相应的服务器日志。

遵循此正确标记答案..它可能会帮助您

如何处理Android中的意外响应500


如果问题仍未解决,我将发布另一个答案。 在邮递员中复制所有标题,例如

.addHeader("content-type", "application/json")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "fa72f792-c9d3-7891-a544-f37f634f6ee1")

并把它放在volly params中


您的问题可能来自 ContentType

您添加此:

@Override
            public String getBodyContentType() {
                return "application/x-www-form-urlencoded";
            }

要么

return "application/json"

如果问题不能解决,则必须使用 JsonObjectRequest


我修改了一下代码,并在邮递员中对其进行了检查,效果很好。

我将JSON编码语句从if语句中移出。

// output data of each row
while($row = $result->fetch_assoc()) {

    $id=$row['id']; 

    $company_name=$row['company_name'];
    $cuisine=$row['cuisine'];
    $conpany_phone=$row['conpany_phone'];
    $company_description=$row['company_description']; 
    $company_logo=$row['company_logo'];
    $company_type=$row['company_type'];
    $delivery_type=$row['delivery_type'];
    $delivery_range=$row['delivery_range']; 
    $delivery_fee=$row['delivery_fee'];
    $delivery_pickupinfo=$row['delivery_pickupinfo'];
    $address=$row['address'];

    $companyData[] = array('id'=> $id,'company_name'=> 
    $company_name,'cuisine'=> $cuisine,'conpany_phone'=> 
    $conpany_phone,'company_description'=> 
    $company_description,'company_logo'=> $company_logo,'company_type'=> 
    $company_type,'delivery_type'=> $delivery_type,'delivery_range'=> 
    $delivery_range,'delivery_fee'=> 
    $delivery_fee,'delivery_pickupinfo'=> $delivery_pickupinfo,'address'=> $address);   
}
echo $jsonformat=json_encode($companyData);

$conn->close();

检查您的 db.php 文件,然后查看返回连接对象的变量。

我看到它应该是 $con->close() 和一个n而不是 $conn->close() 和一个双n


请检查您尝试发送的所有参数是否与服务器期望的相同。 错误或缺失的参数也会返回500错误。 在您的请求中重新验证此参数 Company_mobile 。 希望这能解决您的问题。





android-volley