php - Volley-POST-Zeichenfolgenanforderung, unerwarteter Fehler 500




android android-studio (8)

Ich verwende die Volley-Bibliothek in meinem Projekt und erhalte den Unexpected response code 500 als Antwort.

Ich habe den Stackoverflow gründlich durchsucht und kann immer noch keine funktionierende Lösung finden.

Das Folgende ist mein Code für die GET-Zeichenfolgenanforderung

        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)

Es folgt der Stacktrace

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)

Folgendes ist PHP-Code, den ich auf der Serverseite geschrieben habe:

<?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();
?>

Überprüfen Sie Ihre db.php Datei und sehen Sie dann die Variable, die das Objekt der Verbindung db.php .

Ich sehe, es sollte $con->close() mit einem n sein, nicht $conn->close() mit double n


@ Muhammad Faizan ignorieren Sie Ihre Zweifel, das Problem ist ein 500-Server-Fehler

DAS IST DIE URSACHE

  • POSTMAN und VOLLEY sind nicht dasselbe
  • a) Es gibt einen Fehler in Ihrem PHP-Code or B) Es gibt eine Umgebungseinstellung, die dadurch verfügbar gemacht wird

Eine PHP-Ausgabe diagnostizieren

und du musst dein error_log auf php öffnen. Abhängig von Ihrem Server kann es schwierig sein, dies zu erklären. php.ini die Datei php.ini in error_log ändern. php.ini Sie dies auf dem Server

( absichtlich von hier abgehoben )

/*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

UM EIN UMWELTPROBLEM AUF SERVER ZU DIAGNIEREN

Wenn das error_log nichts ergibt, versuchen Sie es mit dem access_log . Warum? Denn es wird wahrscheinlich eine andere Art von Anfrage eingehen. Und POSTMAN und VOLLEY sind nicht dasselbe

Sie müssen Ihr access_log zu potentiell ansehen und es in Echtzeit sehen, wenn Sie auf Postbote und dann auf den Volley-Client klicken

FAKTEN: (warum wir so sicher sein können)

Nach meinem Gutachten liegt ein Problem mit einem falsch konfigurierten Server vor. Ob Sie es glauben oder nicht, das access_log hilft Ihnen am meisten, wenn dies der Fall ist.

Unabhängig davon: Es gibt eindeutig ein Problem zwischen dem, was Sie in POSTMAN eingeben, und dem, was Ihr Volley-Kunde sendet - das verursacht dies.

Dinge, die ich gesehen habe, sind:

  • Es könnte sich um den SAME ORIGIN handeln.
  • INTERNAL SERVER REDIRECT könnte ein Problem mit INTERNAL SERVER REDIRECT .
  • Es könnte sich um eine ungenaue Weiterleitung von $ _GET an $ _POST handeln (ich habe dieses Problem bei nginx gesehen)
  • Es könnte sich um ein schlechtes Pfadproblem handeln, das mit no-redirect und mangelnder Sicherheit behaftet ist.

Aber ohne uns die Plattform oder den Server mitzuteilen (Windows? Linux? nginx? php-fpm? apache? etc), können wir Ihnen nicht weiterhelfen


Der HTTP-Statuscode 500 stellt den internal server error und gibt eindeutig an, dass Sie auf der Clientseite kein Problem haben (hier in Ihrem Fall Volly ), aber das Problem liegt auf der Serverseite. Versuchen Sie, Ihren serverseitigen PHP-Code zu debuggen. Der Code wird nicht ordnungsgemäß ausgeführt und gibt daher den 500 internal server error im HTTP-Antwortheader zurück. Volly gerade den empfangenen Header als Fehler geworfen.

Wenn Sie ein Back-End-Entwickler sind, sollten Sie es zuerst mit REST Clients versuchen, bevor Sie sich in die mobile Anwendung integrieren. Sie können es von Here . Ihre API sollte gut getestet und funktionsfähig sein, da Sie andernfalls ständig Fehler erhalten.


Dieser Fehler "500" bedeutet serverseitigen Fehler. Dieser Fehler tritt in den folgenden Fällen auf:

  1. Möglicherweise ist die Schreibweise des Parameters oder der URLs falsch
  2. Fehlender Parameter.
  3. Oder Sie senden etwas, das vom Server nicht akzeptiert wird.
  4. Überprüfen Sie auch "http: /" oder "https: /" auf URLs.

Überprüfen Sie diese Bedingungen.Ich habe auch das gleiche Problem .APIs arbeiten auf Post Man, aber nicht auf Geräten mit Volley. Hoffe das kann dir helfen.


HTTP-Statuscodes, die mit 5 beginnen, weisen darauf hin, dass der Fehler serverseitig ist. Der Code 500 wird als interner Serverfehler interpretiert. Um diesen Fehler zu beheben, müssen Sie überprüfen, was ihn verursachen könnte. Dies kann durch einen Fehler im Code verursacht werden. In diesem Fall können Sie Ihr error_log öffnen, um den Fehler anzuzeigen und entsprechend zu handeln.

Dies kann darauf zurückzuführen sein, dass Serverfunktionen momentan nicht verfügbar sind, z. B. der Zugriff auf die Datenbank oder das gleichzeitige Öffnen vieler Verbindungen, die die zugeordneten MySQL-Ressourcen überschreiten.

In anderen Fällen wird der Fehler nicht in der Datei error_log protokolliert. Wenn Sie ein cpanel verwenden, öffnen Sie auf der Homepage auf der Registerkarte "Metriken" die Option "Fehler" und überprüfen Sie die Uhrzeit, zu der Sie eine Anfrage an den Server gesendet haben. Wenn Sie cpanel nicht verwenden, suchen Sie nach einem entsprechenden Serverprotokoll.

Folgen Sie dieser rechten Markierung Antwort .. es kann Ihnen helfen

Wie man mit unerwarteten Reaktionen 500 in Android umgeht


Ich habe den Code ein wenig modifiziert und im Postboten überprüft, es funktioniert gut.

Ich habe die JSON-Codierungsanweisung aus der if-Anweisung entfernt.

// 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();

Ich poste eine andere Antwort, wenn sie noch ungelöst ist. In der Briefträgerkopie gefallen alle Überschriften

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

und stecke das in die volly params


Ihr Problem liegt wahrscheinlich bei ContentType

Sie fügen dies hinzu:

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

oder

return "application/json"

Wenn sich das Problem nicht beheben lässt, müssen Sie JsonObjectRequest





android-volley