プロジェクトで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();
?>
私はコードを少し修正し、郵便配達員でそれをチェックしました、それはうまくいきます。
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();
HTTPステータスコード500
はinternal server error
を表し、クライアント側(ここではVolly
)に問題がないことを明確に示していますが、問題はサーバー側にあります。サーバー側のphpコードをデバッグしてみてください。コードが適切に実行されていないため、HTTP応答ヘッダーで500 internal server error
が返されます。 Volly
は、受信したヘッダーをエラーとしてスローしました。
バックエンド開発者の場合は、モバイルアプリケーションと統合する前に、まずREST Clients
で試してください。 こちら から入手できます。 APIは十分にテストされ、正常に動作している必要があります。そうしないと、常にエラーが発生します。
私はまず何かをGradle依存関係(ライブラリ)内にokhttpをインポートします。ここにドキュメントがあります
https://square.github.io/okhttp/
送信ボタンの下にあるように、コードボタンがあります。それをクリックしてJava-> okhttpを選択します
コードをコピーして、Android studio内に貼り付けます。99.9%の確率で機能します。
あなたの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"}]
あなたの問題はおそらくContentTypeにあります
あなたはこれを追加します:
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded";
}
または
return "application/json"
問題が解決しない場合JsonObjectRequest
を使用する必要があります
送信しようとしているすべてのパラメータが、サーバーが期待しているものと同じかどうかを確認してください。また、パラメーターが間違っているか欠落していると、500エラーが返されます。このパラメータを再確認してくださいCompany_mobile
リクエストで。これで問題が解決することを願っています。
@Muhammad Faizanはあなたの疑問を無視し、問題IS
500サーバーエラー
これIS原因
or
にバグがある)B)これが公開する環境設定がある診断AにPHP ISSUE
phpでerror_log
を開く必要があります。サーバーによっては、これを説明するのが難しい場合があります。そのため、もう1つの方法は、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
をあまりにも潜在的に見て、postmanをクリックしてからボレークライアントをクリックするときにリアルタイムでそれを見る必要があります
事実:(私たちが確信できる理由)
私の直感は、間違って構成されたサーバーに問題があると言っています。これが当てはまる場合、access_logが最も役立つと信じてください。
とにかく:あなたがポストマンに入れているものとあなたのボレークライアントが送っているものの間には明らかに問題があります-それがこれを引き起こしています。
私がこれを引き起こしたのは、次のようなものです。
SAME Origin
エラーの可能性があります。INTERNAL SERVER REDIRECT
の問題である可能性があります。no-redirect
とセキュリティの欠如によって壊されている悪いパスの問題である可能性があります。プラットフォームやサーバー(Windows?Linux?nginx?php-fpm?apache?など)を知らせないと、私たちはそれらについてあなたを助けることができません
それでも解決しない場合は別の回答を投稿しています。郵便配達ですべてのヘッダーを次のようにコピーします
.addHeader("content-type", "application/json")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "fa72f792-c9d3-7891-a544-f37f634f6ee1")
それをvollyパラメータに入れます
db.php
ファイルを確認してから、接続のオブジェクトを返す変数を確認してください。
$con->close()
は1つのnであり、$conn->close()
は2つのnである必要があります。
5で始まるHTTPステータスコードは、エラーがサーバー側にあることを通知します。コード500は内部サーバーエラーとして解釈されます。これを解決するには、何が原因かを確認する必要があります。コードの誤りが原因である可能性があります。その場合は、error_logを開いてエラーを確認し、それに応じて対処できます。
データベースにアクセスしたり、関連するmysqlリソースを超える多数の同時接続が開かれたりするなど、サーバー機能が一時的に利用できないことが原因である可能性があります。
その他の場合には、エラーはerror_logファイルに記録されません。 cpanelを使用している場合は、ホームページの[Metrics]タブで[Errors]を開き、サーバーに要求した時間に従って確認します。 cpanelを使用していない場合は、対応するサーバーログを探します。
この右マークの回答に従ってください。それはあなたを助けるかもしれません
このエラー「500」はサーバー側のエラーを意味します。このエラーは次の場合に発生します:-
これらの条件を確認してください。私も同じ問題に直面しています。APIはPost Manで動作していますが、ボレーを使用するデバイスでは動作しません。これがお役に立てば幸いです。