web-dev-qa-db-fra.com

Code de réponse inattendu 500 pour POST

Je fais une mise à jour sur l'ancien projet et je n'ai pas beaucoup de connaissances sur Android pour l'instant. Dans le projet, nous avons une section Commentaires sur le produit.

Pour un commentaire après l'envoi plus tôt, nous avions renvoyé 0 (une erreur) et 1 (succès).

Voici le code que nous utilisions.

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    null, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(
            JSONObject response) {

        Log.d("response done", "done===" + response);

        mloading.setVisibility(View.GONE);
        if (response != null) {
            Comment obj = new Comment();
            JSONObject jsonObject = response;
            try {
                obj.setComment(jsonObject
                        .getString("Comment"));

Maintenant, nous avons changé l'objet de retour de 0/1 en objet utilisateur.

Faut-il mettre à jour JsonObjectRequest en requête GJSON? Ou l'objet sera également analysé avec JsonObjectRequest?

Je demande parce que lorsque j'exécute ci-dessus, j'obtiens une erreur comme ci-dessous.

01-25 12:30:21.754: E/Volley(16487): [10114] BasicNetwork.performRequest: 
Unexpected response code 500 for 
http://new.souqalharim.com/add/CommentForMerchant

Une idée pourquoi j'obtiens cette erreur?

Remarque: cette URL fonctionne correctement pour l'application iPhone.


Modifier 1

Il s'agit de la méthode de publication, donc l'URL complète n'est pas là. Il y a quelques autres paramètres à ajouter comme? Comment = MyComment & userId = 123 & productId = 234. Comme c'est post, je n'ajoute pas de paramètres dans l'URL réelle.

Je les ai dans une autre méthode

@Override
protected Map<String, String> getParams()
        throws AuthFailureError {
    Map<String, String> params = new HashMap<String, String>();
    params.put("productId", productId.toString());
    params.put("userId",
            mSessionManager.getUserCode().toString());
    params.put("comment", GlobalFunctions
            .EncodeParameter(med_comments
                    .getText().toString()));



    return params;
}

L'URL complète est comme ci-dessous.

http://new.souqalharim.com/add/CommentForUser?productId=325&userId=5&comment=abcd

J'ai testé cela dans Mozilla RESTClient et cela fonctionne très bien.


Modifier 2

Après avoir vérifié plus loin, j'ai trouvé que protected Map<String, String> getParams() throws AuthFailureError { n'était pas appelée. Une idée pourquoi cela se produit?

12
user3102156

Le problème est ci-dessous.

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    null, new Response.Listener<JSONObject>() {
    ^^^^

Ça devrait être

final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    new JSONObject(params), new Response.Listener<JSONObject>() {
    ^^^^^^^^^^^^^^^^^^^^^^

Copiez le code de protected Map<String, String> getParams() avant final JsonObjectRequest.

C'est ça!!!

La raison est comme ci-dessous.

La JsonObjectRequest est étendue JsonRequest qui remplace directement la méthode getBody(), donc votre getParam () n'invoquerait jamais, je vous recommande d'étendre StringRequest au lieu de JsonObjectRequest.

vous pouvez vérifier cette réponse pour plus de détails.

9
Fahim Parkar

En fait, 500 signifie une erreur de serveur interne et cela est dû à l'API Rest que vous appelez et non à Volley, alors vérifiez le code principal.

6
Arunmani