我在我的项目中使用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();
?>
答案 0 :(得分:1)
答案 1 :(得分:1)
HTTP状态代码500
代表internal server error
,明确指出您在客户端没有任何问题(这里是您的情况Volly
),但问题出在服务器上-侧。尝试调试您的服务器端php代码。代码未正确执行,因此在Http响应标头中返回500 internal server error
。 Volly
只是将接收到的标头作为错误抛出。
如果您是后端开发人员,则在与移动应用程序集成之前,应先使用REST Clients
进行尝试。您可以从Here获得它。您的API应该经过良好的测试,并且应该处于工作状态,否则您将始终收到错误消息。
答案 2 :(得分:1)
我有东西 首先将okhttp导入Gradle依赖项(库)中。 这是文档
https://square.github.io/okhttp/
您可以在发送按钮下方看到代码按钮。单击它,然后选择java-> okhttp
复制代码并将其粘贴到android studio中。它有99.9%的机会会起作用。
答案 3 :(得分:1)
我稍微修改了代码,并在邮递员中对其进行了检查,效果很好。
我将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();
答案 4 :(得分:0)
此错误“ 500”表示服务器端错误。在以下情况下会发生此错误:-
检查这些条件。我也遇到了同样的问题。API在Post Man上运行,但在使用截击的设备上不运行。希望对您有帮助。
答案 5 :(得分:0)
请检查您尝试发送的所有参数是否与服务器期望的相同。错误或缺失的参数也会返回500错误。
在您的请求中重新验证此参数Company_mobile
。希望这能解决您的问题。
答案 6 :(得分:0)
以5开头的HTTP状态代码表示错误在服务器端。代码500被解释为内部服务器错误,要解决此问题,您必须检查可能导致该错误的原因。在这种情况下,可能是由于代码错误引起的,您可以打开error_log查看错误并采取相应措施。
这可能是由于服务器功能暂时无法使用,例如访问数据库或具有多个同时打开的连接而超出了相关的mysql资源。
有时,该错误未记录到error_log文件中。如果使用面板,请在主页的“度量”选项卡下,打开“错误”,然后根据您请求服务器的时间进行检查。如果您不使用cpanel,请查找相应的服务器日志。
遵循此正确标记答案..可能会帮助您
答案 7 :(得分:0)
检查您的db.php
文件,然后查看返回连接对象的变量。
我认为应该是$con->close()
且n为n,而不是$conn->close()
且为double n
答案 8 :(得分:0)
您的问题可能来自 ContentType
您添加此:
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded";
}
或
return "application/json"
如果问题仍未解决
您必须使用 JsonObjectRequest
答案 9 :(得分:0)
尝试包括在您的php文件中:
header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");
我不熟悉Kotlin,但是使用Java对我来说很好用,这是代码:
private void loadRecyclerViewData2(){
URR_DATA="http://squadtechsolution.com/android/v1/allcompany.php";
StringRequest stringRequest = new StringRequest(Request.Method.GET,
URR_DATA,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
System.out.println("****"+response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("***"+error.getMessage()); }
});
requestQueue = Volley.newRequestQueue(Home.this);
requestQueue.add(stringRequest);
}
我得到以下输出:
I/System.out: ****
[{"id":"1","company_name":"ABC","cuisine":"QATAR","conpany_phone":"4535345","company_description":"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ","company_logo":"company_logo5d80bac690f2e.png","company_type":"Food","delivery_type":"yes","delivery_range":"55","delivery_fee":"","delivery_pickupinfo":"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, ","address":"33.58539655788556,71.43779296427965"}]
答案 10 :(得分:0)
@Muhammad Faizan忽略您的疑问,该问题 IS
是500服务器错误
这是原因
or
中有一个错误B)有一个环境设置可以暴露诊断PHP问题
,您需要在php上打开error_log
。根据您的服务器,可能很难解释另一种方法是将php.ini
更改为error_log以便在服务器上尝试此操作
(lifted from here deliberately)
/*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
问题。 no-redirect
和缺乏安全性所困扰。 但是在不告诉我们平台或服务器(Windows?Linux?nginx?php-fpm?apache?等)的情况下,我们无法在这些方面为您提供帮助
答案 11 :(得分:0)
如果仍未解决,我将发布另一个答案。 在邮递员中复制所有标题,例如
.addHeader("content-type", "application/json")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "fa72f792-c9d3-7891-a544-f37f634f6ee1")
并将其放入volly params