Question

Je suis nouveau à la bibliothèque Android Volley.J'envoie nom d'utilisateur et mot de passe à l'API et à l'API renvoie les détails de l'utilisateur.Alors voici ma méthode de connexion à Android.

public void LoginUser(){

    // Tag used to cancel the request
    String tag_json_obj = "json_obj_req";

    String url = "http://example.com/myfile/mobile_api/";

    //final ProgressDialog pDialog = ProgressDialog.show(getParent(), "Please wait", "Login user");


            JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
                    url, null,
                    new Response.Listener<JSONObject>() {

                        @Override
                        public void onResponse(JSONObject response) {
                            try {
                                if(response.getString(KEY_SUCCESS)!=null){

                                    String res = response.getString(KEY_SUCCESS);

                                    if(Integer.parseInt(res) == 1){
                                       JSONObject json_user = response.getJSONObject("user");
                                       Toast.makeText(getApplicationContext(), "User Logged in.. " + json_user.getString("name"), Toast.LENGTH_LONG).show();
                                    }
                                }
                                else if(response.getString(KEY_ERROR)!=null){

                                    String res = response.getString(KEY_ERROR);

                                    if(Integer.parseInt(res) == 1){
                                        Toast.makeText(getApplicationContext(), response.getString("error_msg"), Toast.LENGTH_LONG).show();
                                    }
                                }

                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                                //pDialog.hide();
                            }
                            Log.d(TAG, response.toString());
                            //pDialog.hide();
                        }
                    }, new Response.ErrorListener() {

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            VolleyLog.d(TAG, "Error: " + error.getMessage());
                            Log.d(TAG, "Error: " + error.getMessage());
                            //pDialog.hide();
                        }
                    }) {

                @Override
                protected Map<String, String> getParams() {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("tag", login_tag);
                    params.put("email", Email);
                    params.put("password", Pass);

                    return params;
                }

            };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
}

Et ceci est mon fichier API Index.php

if ($tag == 'login') {

    $email = $_POST['email'];
    $password = $_POST['password'];


    $user = $db->getUserByEmailAndPassword($email, $password);
    if ($user != false) {

        $response["success"] = 1;
        $response["uid"] = $user["id"];
        $response["user"]["name"] = $user["name"];
        $response["user"]["phone"] = $user["contact_no"];
        $response["user"]["email"] = $user["email"];
        $response["user"]["reg_date"] = $user["reg_date"];
        echo json_encode($response);
    } else {

        $response["error"] = 1;
        $response["error_msg"] = "Incorrect email or password!";
        echo json_encode($response);
    }

Mais je reçois l'erreur suivante de JSON

07-31 16: 58: 27.307: E / JSON Parser (7506): erreur d'analyse de données org.json.jsonxception: valeur no de type java.lang.string ne peut pas être converti en JSONOBJECT

Voilà ceci est la bonne façon de connecter une API mobile et de l'application Android à l'aide de volley?ou quelqu'un peut-il m'expliquer la raison de cela?

Était-ce utile?

La solution

Eh bien, je pense avoir trouvé le problème.Je reçois ce message d'erreur car il renvoie une chaîne "Accès refusé" si la balise est incorrecte, elle donne le message "Accès refusé".Donc, ce n'est pas un objet JSON, c'est juste une chaîne.Pour résoudre l'erreur, vous pouvez utiliser la requête chaîne pour obtenir la valeur de chaîne.

StringRequest strReq = new StringRequest(Method.POST, //here change the method to POST
            Const.URL_STRING_REQ, new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    Log.d(TAG, response.toString());
                    msgResponse.setText(response.toString());
                    hideProgressDialog();

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d(TAG, "Error: " + error.getMessage());
                    hideProgressDialog();
                }


            }){

        @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("tag", login_tag);
                params.put("email", Email);
                params.put("password", Pass);

                return params;
            }
    };

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top