Android Studio Retrofit

Signaler
Messages postés
6
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
19 mars 2020
-
BunoCS
Messages postés
14851
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 avril 2020
-
Bonjour,
J'ai créé un API en laravel pour modifier le profil d'utilisateur et ça marche bien avec Postman, au niveau android j'ai créé une Interface
public interface UpdateProfile {
 
    String UPDPRO ="http://IP/Projet/public/api/";
    @FormUrlEncoded
    @POST("users/{id}")
    Call<String> UpdateUsers(
            @Path("id") int id,
            @Field("name") String name,
            @Field("adresse") String adresse,
            @Field("prenom") String prenom,
            @Field("email") String email,
            @Field("numtel") String numtel
    );
}

et mon profil fragment
public class Profile_Fragment extends Fragment  implements View.OnClickListener {
    private EditText editTextName, editTextPrenom,editTextAdresse,editTextEmail,editTextTel;
    private static View view;
    private static Button buttonupdate;
    public Profile_Fragment(){
 
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view= inflater.inflate(R.layout.profile_fragment, container, false);
        initViews();
        setListeners();
        return view;
        }
    private void initViews() {
        editTextName = view.findViewById(R.id.editTextName);
        editTextPrenom = view.findViewById(R.id.editTextPrenom);
        editTextAdresse=view.findViewById(R.id.editTextAdresse);
        editTextEmail = view.findViewById(R.id.editTextEmail);
        editTextTel = view.findViewById(R.id.editTextTel);
        buttonupdate = view.findViewById(R.id.buttonupdate);
    }
    private void setListeners() {
        buttonupdate.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.buttonupdate:
                updateUsers();
                break;
        }
    }
    private void updateUsers() {
        int id = getId();
        String name = editTextName.getText().toString().trim();
        String prenom = editTextPrenom.getText().toString().trim();
        String email = editTextEmail.getText().toString().trim();
        String adresse = editTextAdresse.getText().toString().trim();
        String numtel = editTextTel.getText().toString().trim();
 
        if (name.isEmpty()) {
            editTextName.setError("Nom doit être rempli");
            editTextName.requestFocus();
            return;
        }
        if (prenom.isEmpty()) {
            editTextPrenom.setError("Prenom doit être rempli");
            editTextPrenom.requestFocus();
            return;
        }
        if (adresse.isEmpty()) {
            editTextAdresse.setError("Adresse doit être rempli");
            editTextAdresse.requestFocus();
            return;
        }
        if (email.isEmpty()) {
            editTextEmail.setError("Email doit être rempli");
            editTextEmail.requestFocus();
            return;
        }
        if (numtel.isEmpty()) {
            editTextTel.setError("Numero téléphone doit être rempli");
            editTextTel.requestFocus();
            return;
        }
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(UpdateProfile.UPDPRO)
                .addConverterFactory(ScalarsConverterFactory.create())
                .build();
        UpdateProfile api = retrofit.create(UpdateProfile.class);
        Call<String> call = api.UpdateUsers(id,name,prenom,adresse,email,numtel);
 
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
 
                if (response.isSuccessful()) {
                    if (response.body() != null) {
                        Log.i("Responsestring", response.body().toString());
                        Log.i("onSuccess", response.body().toString());
 
                        String jsonresponse = response.body().toString();
 
                        try {
                            JSONObject jsonObject = new JSONObject(jsonresponse);
 
                            if (jsonObject.getString("status").equals("success")) {
                                Toast.makeText(getActivity(), "Update Successfully!", Toast.LENGTH_SHORT)
                                        .show();
                            } else if (jsonObject.getString("status").equals("error")) {
                              /*  new CustomToast().Show_Toast(getActivity(), view,
                                        " " + jsonObject.getString("message"));*/
                                Toast.makeText(getActivity(), "Update failed!", Toast.LENGTH_SHORT)
                                        .show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
 
                    }
 
                }
            }
 
            @Override
            public void onFailure(Call<String> call, Throwable t) {
                Toast.makeText(getContext(), "Server invalid \n" + t.getMessage(), LENGTH_LONG).show();
            }
        });
 
 
    }
 
 
}


lorsque j’insère des nouveaux informations pour l'utilisateur j'aperçoit Update failed. J'estime que le problème vient du id de l'utilisateur, puisque quand je change la methode PUT par PUT('users/2') par exemple je donnes le id moi même ça fonctionne bien.

1 réponse

Messages postés
14851
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 avril 2020
1 804
Hello,

Du coup, que retourne ta fonction
getID()
? Tu as testé en Debug ?

Note : pour gagner en lisibilité, j'ai modifié des balises code pour indiquer le langage Java. Merci d'y penser pour la prochaine fois.

@+ 
Buno, Modérateur 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
DalyMHY
Messages postés
6
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
19 mars 2020

Ou je peux trouver exactement la valeur de getID() dans le Debug ? ( je suis pas trop expérimenté en Android )
BunoCS
Messages postés
14851
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 avril 2020
1 804 > DalyMHY
Messages postés
6
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
19 mars 2020

Tu mets un point d'arrêt sur la méthode, ou dans le corps de celle-ci.
Sinon, tu print le log et tu regardes la fenêtre Logcat.
DalyMHY
Messages postés
6
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
19 mars 2020
> BunoCS
Messages postés
14851
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 avril 2020

getID() retourne 2131165284 qui n'existe pas dans ma base de données.
J'ai une petite question lors de la connexion dans mon application j’obtiens une reponse json avec tous les détails du utilisateur connecté {"status":"success","data":{"id":2,"name":"user","prenom":"user"...} est ce que je peux utiliser l'id de ce utilisateur et de l'utiliser dans cette fragment pour résolu ce problème ?
BunoCS
Messages postés
14851
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 avril 2020
1 804 > DalyMHY
Messages postés
6
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
19 mars 2020

Donc ta méthode
getId()
contient une erreur qu'il faut corriger. Ou bien l'erreur se situe dans la sauvegarde de la base de données. A toi d'investiguer