web-dev-qa-db-fra.com

Volley POST chaîne demande erreur inattendue 500

J'utilise la bibliothèque Volley dans mon projet et j'obtiens Unexpected response code 500 comme réponse.

J'ai effectué une recherche approfondie sur stackoverflow et je ne parviens toujours pas à trouver une solution qui fonctionne.

Voici mon code pour faire une demande de chaîne 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)

Voici le 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)

Ce qui suit est PHP code que j'ai écrit côté serveur:

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

J'ai un peu modifié le code et l'ai vérifié dans Postman, ça fonctionne bien.

J'ai déplacé la déclaration d'encodage JSON de l'instruction 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();
1
Syed Usama Ahmad

Code d'état HTTP 500 représente le internal server error, indique clairement que vous n'avez aucun problème côté client (ici dans votre cas Volly) mais le problème est côté serveur. Essayez de déboguer votre code php côté serveur. le code ne s'exécute pas correctement et retourne donc le 500 internal server error dans l'en-tête de réponse Http. Volly vient de jeter l'en-tête reçu comme une erreur.

Si vous êtes développeur backend, essayez-le d'abord avec REST Clients avant l'intégration avec l'application mobile. Vous pouvez en obtenir un de ici . Votre API doit être bien testée et doit être dans un état de fonctionnement sinon vous recevrez des erreurs tout le temps.

1
Kiran Maniya

J'ai quelque chose Importez d'abord le okhttp dans la dépendance Gradle (bibliothèque). voici la documentation

https://square.github.io/okhttp/

Après avoir ouvert le facteur et cliquez sur le menu de code enter image description here

Comme vous pouvez le voir sous le bouton d'envoi, le bouton de code est là. cliquez dessus et sélectionnez Java-> okhttp

copiez le code et collez-le à l'intérieur Android studio. il a 99,9% de chances que cela fonctionne.

1
raj kavadia

Supprimez la ligne ci-dessous de votre code côté serveur et vérifiez

echo $jsonformat=json_encode($companyData);

et la même chose ne fonctionne pas sur le facteur aussi

enter image description here

1
Kailash Chouhan

Essayez d'inclure dans votre fichier php:

header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");

Je ne suis pas familier avec Kotlin mais cela fonctionne bien pour moi en utilisant Java, voici le code:

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);
    }

Et j'obtiens la sortie suivante:

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"}]
0
waghydjemy

Votre problème vient probablement de ContentType

vous ajoutez ceci:

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

ou

return "application/json"

Si le problème ne résout pas, vous devez utiliser JsonObjectRequest

0
Pouria Hemati

Veuillez vérifier si tous les paramètres que vous essayez d'envoyer sont les mêmes que ceux attendus par le serveur. Des paramètres erronés ou manquants renvoient également une erreur de 500. Revérifiez ce paramètre Company_mobile dans votre demande. J'espère que cela résout votre problème.

0
Anudeep

@Muhammad Faizan ignore vos doutes, le problème IS une erreur de serveur 500

CECI IS LA CAUSE

  • POSTMAN et VOLLEY ne sont pas les mêmes
  • a) il y a un bug dans votre PHP or B) il y a un paramètre d'environnement que cela expose

POUR DIAGNOSTIQUER UN PHP ISSUE

et vous devez ouvrir votre error_log sur php. En fonction de votre serveur, il peut être difficile d'expliquer comment l'autre manière consiste à modifier le php.ini à error_log pour ce faire, essayez ceci SUR LE SERVEUR

( levé délibérément d'ici )

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

POUR DIAGNOSTIQUER UN PROBLÈME D'ENVIRONNEMENT SUR LE SERVEUR

Si la error_log ne donne rien essayez le access_log. Pourquoi? Parce qu'il montrera probablement qu'un autre type de demande est entré. Et POSTMAN et VOLLEY ne sont pas les mêmes

Vous devez regarder votre access_log trop potentiellement et regardez-le en temps réel lorsque vous cliquez sur facteur puis sur le client de volley

FAITS: (pourquoi nous pouvons être si sûrs)

Mon instinct dit que vous avez un problème dans un serveur mal configuré. Croyez-le ou non, access_log vous aidera le plus si c'est le cas.

Quoi qu'il en soit: il y a clairement un problème entre ce que vous mettez dans POSTMAN et ce que votre client de volley envoie - c'est la cause de cela.

Les choses que j'ai vues à cause de cela incluent:

  • Ce pourrait être un SAME Origin Erreur.
  • Ce pourrait être un INTERNAL SERVER REDIRECT problème.
  • Il pourrait s'agir d'un transfert imprécis de $ _GET vers $ _POST (j'ai vu ce problème sur nginx)
  • Il pourrait s'agir d'un problème de chemin d'accès incorrect qui est en train d'être mutilé avec no-redirect et le manque de sécurité.

mais sans nous dire la plate-forme ou le serveur (Windows? Linux? nginx? php-fpm? apache? etc) nous ne pouvons pas vous aider sur ces

0
Mr Heelis

Je poste une autre réponse si elle n'est toujours pas résolue. Dans le facteur, copiez tous les en-têtes comme

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

et mettre ça dans les param volly

0
raj kavadia

Vérifiez votre fichier db.php Puis voyez la variable qui retourne l'objet de connexion.

Je vois que cela devrait être $con->close() avec un n pas $conn->close() avec double n

0
Yovi Prasetyo

Les codes d'état HTTP commençant par 5 indiquent que l'erreur est du côté serveur. Le code 500 est interprété comme une erreur de serveur interne, pour résoudre ce problème, vous devez vérifier ce qui pourrait en être la cause. Cela peut être dû à une erreur dans le code, dans ce cas, vous pouvez ouvrir votre error_log pour voir l'erreur et agir en conséquence.

Cela peut être dû au fait que les fonctionnalités du serveur ne sont pas disponibles momentanément, comme l'accès à la base de données ou que de nombreuses connexions ouvertes simultanément dépassent les ressources mysql associées.

Parfois, l'erreur n'est pas enregistrée dans le fichier error_log. Si vous utilisez un cpanel, sur la page d'accueil, sous l'onglet Métriques, ouvrez Erreurs et vérifiez en fonction de l'heure que vous avez demandée au serveur. Si vous n'utilisez pas cpanel, recherchez un journal de serveur correspondant.

suivez cette bonne réponse Réponse .. cela peut vous aider

Comment faire face à une réponse inattendue 500 dans Android

0
Vasudev Vyas

Cette erreur "500" signifie une erreur côté serveur. Ces erreurs se produisent dans les cas suivants: -

  1. Peut être un mauvais sort sur le paramètre ou les URL
  2. Manque de paramètre.
  3. Ou vous envoyez quelque chose qui n'est pas accepté par le serveur.
  4. Vérifiez également "http: /" ou "https: /" sur les URL.

Vérifiez ces conditions. J'ai également rencontré le même problème. Les API fonctionnent sur Post Man mais ne fonctionnent pas sur les appareils utilisant Volley. J'espère que cela peut vous aider.

0
Rahul Kushwaha