كيفاش تستعمل Volley باش ترسل البيانات الجزء الثاني

فهاد الجزء الثاني من هاد المشروع غادي نقادو الملفات لي غادي يمكننا من الإتصال بقاعدة البيانات والكود لي غادي يمكن المستخدم من التسجيل والدخول ونعديل البيانات كما غادي يمكنو من حذف الحساب ديالو.

نظرة سريعة بالفيديو


- الملف RegisterActivity.java


أول حاجة غادي نمشي للمجلد java وغادي نزيد ملف جديد لي عبارة عن Blank Activity غادي نسميه RegisterActivity من بعد غادي نزيد فيه الكود لي غادي يمكن المستخدم من إرسال البيانات ل serveur فاول الملف كنزيد ل variables لي غادي نربطهم بالأدوات لي عندي فالملف activity_register.xml من بعد كانزيد ل url ديال الملف لي غادي يمكني من التسجيل ولي غادي نزيدوه فالجزء الثالث لي غادي يكون خاص بال serveur منبعد كاين واحد ل fonction moveToLogin لي غادي تمكن المستخدم من التنقل للActivity الخاصة بتسجيل الدخول منبعد كاين لfonction registerUser لي كتمكني من التسجيل ولي كتم من بعد مكتحقق من أن حتى شي حقل ما خاوي بواسطة ل fonction validate كنستعمل JSON باش كان recupérer الإجابة لي صيفطلي serveur يلا تم التسجيل بنجاح المستخدم كيتوجه ل Activity الخاصة بتسجيل الدخول متمش التسجيل كتعرض رسالة الخطأ الكود هو :

                                    
                                        package com.example.darijacoding.restapp.model;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.darijacoding.restapp.model.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class RegisterActivity extends AppCompatActivity {
    EditText nom;
    EditText email;
    EditText password;
    String url;
    StringRequest  stringRequest;
    RequestQueue requestQueue;
    Button register;
    ProgressDialog progressDialog;
    TextView login;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        nom = (EditText) findViewById(R.id.NomEditText);
        email = (EditText) findViewById(R.id.input_email);
        password = (EditText) findViewById(R.id.input_password);
        register = (Button) findViewById(R.id.btn_signup);
        login = (TextView) findViewById(R.id.link_login);
        progressDialog = new ProgressDialog(RegisterActivity.this,ProgressDialog.STYLE_SPINNER);
        url = "http://auth.freeoda.com/register.php";
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                registerUser();
            }
        });
        moveToLogin();
    }
    private void moveToLogin() {
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
    private void registerUser() {
        if(validate() == true){
            stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try{
                        JSONObject jsonObject = new JSONObject(response);
                        final String success = jsonObject.getString("success");
                        progressDialog.setIndeterminate(true);
                        progressDialog.setMessage("Création de compte...");
                        progressDialog.show();
                        new android.os.Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                progressDialog.dismiss();
                                Toast.makeText(RegisterActivity.this,success, Toast.LENGTH_SHORT).show();
                                reinitialise();
                                Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
                                startActivity(intent);
                                finish();
                            }
                        }, 3000);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(RegisterActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                }
            }){
                @Override
                public Map<String, String> getParams(){
                    Map<String, String> params = new HashMap<>();
                    params.put("nom",nom.getText().toString());
                    params.put("email",email.getText().toString());
                    params.put("password",password.getText().toString());
                    return params;
                }
            };
            RequestQueue requestQueue = Volley.newRequestQueue(RegisterActivity.this);
            requestQueue.add(stringRequest);
        }
    }

    private void reinitialise() {
        nom.setText("");
        email.setText("");
        password.setText("");
    }
    public boolean validate() {
        boolean valid = true;
        String nomUser = nom.getText().toString().trim();
        String emailUser = email.getText().toString().trim();
        String passwordUser = password.getText().toString().trim();

        if (nomUser.isEmpty() || emailUser.isEmpty() || passwordUser.isEmpty()) {
            Toast.makeText(RegisterActivity.this,"Veuillez remplir tous les champs",Toast.LENGTH_LONG).show();
            valid = false;
        }
        return valid;
    }
}

                                    
                                

- الملف SessionManager.java


غادي نمشي للمجلد java وغادي نزيد ملف جديد لي عبارة عن Class هاد الملف هو لي غادي يمكنا من الإحتفاظ بالمعلومات الخاصة بالمستخدم منبعد ما يسجل الدخول ديالو ولي غادي نعرضوها فل profile ديالو وغادي نعرضوها حتى فل form لي غادي تمكنو من تعديل المعلومات الخاصة به هنا كنستعملو SharedPreferences لي هي واحد ل class لي كتمكنا من تسجيل معلومات فال Mémoire دون فقدانها أولا كنزيد متغيرات لي عبارة عن المعلومات الخاصة بالمستخدم منبعد كاين ل fonction CreateLoginSession لي كتمكن من حفظ البريد الإلكتروني وكلمة المرور ديال المستخدم منبعد ماكاي يسجل الدخول ديالو لfonction getDetails كنمكني من استرجاع البيانات الخاصة بالمستخدم ملي نحتاجها لfonction isLoggedIn كتمكني مني التحقق واش المستخدم داخل أو لا لا لfonction SaveUserInfo كتمكني من حفظ المعلومات الخاصة بالمستخدم كاملة الكود هو :

                                    
                                        package com.example.darijacoding.restapp.model;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

import java.util.HashMap;

/**
 * Created by Imad on 27/12/2016.
 */
public class SessionManager {
    SharedPreferences prefs;
    SharedPreferences.Editor editor;
    Context context;
    private int PRIVATE_MODE = 0;
    private static final String PREF_NAME = "AuthSession";
    private static final String IS_LOGIN = "IsLoggedIn";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_PASSE = "password";
    private static final String KEY_NOM = "nom";
    private static final String KEY_ID = "id_user";
    public SessionManager(Context context){
        this.context = context;
        prefs = this.context.getSharedPreferences(PREF_NAME,PRIVATE_MODE);
        editor = prefs.edit();
    }
    //enregistré l'email et le mot de passe de l'utilisateur
    public void CreateLoginSession(String email,String password){
        editor.putBoolean(IS_LOGIN,true);
        editor.putString(KEY_EMAIL, email);
        editor.putString(KEY_PASSE, password);
        editor.commit();
    }
    //recupérer l'email et le mot de passe
    public HashMap<String,String> getDetails(){
        HashMap<String,String> user= new HashMap<>();
        user.put(KEY_EMAIL, prefs.getString(KEY_EMAIL, null));
        user.put(KEY_PASSE, prefs.getString(KEY_PASSE, null));
        user.put(KEY_NOM, prefs.getString(KEY_NOM, null));
        user.put(KEY_ID, prefs.getString(KEY_ID, null));
        return user;
    }
    public boolean isLoggedIn(){
        return prefs.getBoolean(IS_LOGIN, false);
    }
    public void LogOutUser(){
        editor.clear();
        editor.commit();
        Intent i = new Intent(this.context,LoginActivity.class);
        this.context.startActivity(i);
    }
    public void SaveUserInfo(String id_user,String email,String password,String nom){
        editor.putString(KEY_ID,id_user);
        editor.putString(KEY_EMAIL, email);
        editor.putString(KEY_PASSE, password);
        editor.putString(KEY_NOM,nom);
        editor.commit();
    }
}

                                    
                                

- الملف LoginActivity.java


دائما فالمجلد java غادي نزيد ملف غادي نسميه LoginActivity هاد الملف هو لي غادي يتحقق من المعلومات لي دخل المستخدم وغادي يتحقق من أن حتى شي حقل ما خاوي بل fonction validate من بعد غادي يرسل المعلومات ل serveur بلfonction validateAndLogin وغادي يستقبل الإجابة يلا كانت false يعني الإمايل او كلمة المرور غالطة كانت العكس يعني راه المستخدم سجل الدخول ديالو غادي نسجلو المعلومات ديالو بلfonction CreateLoginSession غادي انسترجعوا المعلومات الخاصة به لي غادي نسجلها بإستعمال ل fonction SaveUserInfo من بعد غادي يتوجه لProfileActivity الكود ديال الملف هو :

                                      
                                        package com.example.darijacoding.restapp.model;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.darijacoding.restapp.model.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class LoginActivity extends AppCompatActivity {
    TextView register;
    StringRequest stringRequest;
    RequestQueue requestQueue;
    String url;
    EditText email,password;
    Button loginBtn;
    private SessionManager session;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        register = (TextView) findViewById(R.id.link_signup);
        email = (EditText) findViewById(R.id.input_email);
        password = (EditText) findViewById(R.id.input_password);
        loginBtn = (Button) findViewById(R.id.btn_login);
        session = new SessionManager(LoginActivity.this);
        url = "http://auth.freeoda.com/login.php";
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                validateAndLogin();
            }
        });
        moveToRegister();
    }
    private void validateAndLogin() {
        if(validate() == true){
            stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonObject = new JSONObject(response);
                        final String user = jsonObject.getString("user");
                        Log.v("user :",response);
                        if(user.contains("false")) {
                            Toast.makeText(LoginActivity.this,"Email ou mot de passe est incorrect", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(LoginActivity.this,"Vous êtes connecté", Toast.LENGTH_SHORT).show();
                            session.CreateLoginSession(email.getText().toString(),password.getText().toString());
                            JSONObject userInfo = new JSONObject(user);
                            final String nomUser = userInfo.getString("name");
                            final String emailUser = userInfo.getString("email");
                            final String passeUser = userInfo.getString("password");
                            final String id_user = userInfo.getString("id");
                            session.SaveUserInfo(id_user,emailUser,passeUser,nomUser);
                            Intent i = new Intent(LoginActivity.this,ProfileActivity.class);
                            startActivity(i);
                            finish();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(LoginActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                }
            }){
                @Override
                public Map<String, String> getParams(){
                    Map<String, String> params = new HashMap<>();
                    params.put("email",email.getText().toString());
                    params.put("password",password.getText().toString());
                    return params;
                }
            };
            RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this);
            requestQueue.add(stringRequest);
        }
    }
    private boolean validate() {
        boolean valid = true;
        String emailUser = email.getText().toString().trim();
        String passwordUser = password.getText().toString().trim();
        if (emailUser.isEmpty() || passwordUser.isEmpty()) {
            Toast.makeText(LoginActivity.this,"Veuillez remplir tous les champs",Toast.LENGTH_LONG).show();
            valid = false;
        }
        return valid;
    }
    private void moveToRegister() {
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

}

                                      
                                    

- الملف ProfileActivity.java


دائما فالمجلد java غادي نزيد ملف غادي نسميه PofileActivity هاد الملف هو لي غادي يعرض المعلومات لي دخل المستخدم بواسطة لfonction getUserDetails لي غادي تمكني من إسترجاع المعلومات لي كاينة ف SharedPreferences وغادي تكون فيه أيضا 3 ديال ل Boutons واحد ديال تعديل المعلومات كينفد ل fonction updateUser وآخر كيمكن من حذف الحساب من قاعدة البيانات ولي كينفذ لfonction deleteUser لي كترسل ل id ديال المستخدم لurl وكتلقى الإجابة لي هي عبارة عن رسالة تأكيد الحذف أو الخطأ وآخر زر كيمكن المستخدم من الخروج وكينفذ لfonction logoutUser الكود ديال الملف هو :

                                        
                                            package com.example.darijacoding.restapp.model;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.darijacoding.restapp.model.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class ProfileActivity extends AppCompatActivity {
    TextView nom;
    TextView email;
    private StringRequest stringRequest;
    private RequestQueue requestQueue;
    SessionManager sessionManager;
    Button updateBtn,deleteBtn,logoutBtn;
    ProgressDialog progressDialog;
    String url;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        nom = (TextView) findViewById(R.id.name);
        email = (TextView) findViewById(R.id.email);
        sessionManager = new SessionManager(ProfileActivity.this);
        updateBtn = (Button) findViewById(R.id.updateBtn);
        deleteBtn = (Button) findViewById(R.id.deleteBtn);
        logoutBtn = (Button) findViewById(R.id.LogoutBtn);
        progressDialog = new ProgressDialog(ProfileActivity.this,ProgressDialog.STYLE_SPINNER);
        url = "http://auth.freeoda.com/delete.php";
        getUserDetails();
        updateUser();
        deleteUser();
        logoutUser();
    }
    private void deleteUser() {
        deleteBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try{
                            JSONObject jsonObject = new JSONObject(response);
                            final String success = jsonObject.getString("success");
                            progressDialog.setIndeterminate(true);
                            progressDialog.setMessage("Suppression de compte...");
                            progressDialog.show();
                            new android.os.Handler().postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    progressDialog.dismiss();
                                    Toast.makeText(ProfileActivity.this,success, Toast.LENGTH_SHORT).show();
                                    sessionManager.LogOutUser();
                                    finish();
                                }
                            }, 3000);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(ProfileActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                    }
                }){
                    @Override
                    public Map<String, String> getParams(){
                        Map<String, String> params = new HashMap<>();
                        params.put("id_user",sessionManager.getDetails().get("id_user"));
                        return params;
                    }
                };
                requestQueue = Volley.newRequestQueue(ProfileActivity.this);
                requestQueue.add(stringRequest);
            }
        });
    }
    private void logoutUser(){
        logoutBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sessionManager.LogOutUser();
                finish();
            }
        });
    }
    private void updateUser() {
        updateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(ProfileActivity.this,UpdateActivity.class);
                startActivity(i);
                finish();
            }
        });
    }
    private void getUserDetails() {
        if(sessionManager.isLoggedIn()){
            nom.setText(sessionManager.getDetails().get("nom"));
            email.setText(sessionManager.getDetails().get("email"));
        }
    }

}

                                        
                                    

- الملف UpdateActivity.java


دائما فالمجلد java غادي نزيد ملف غادي نسميه UpdateActivity هاد الملف هو لي غادي يعدل المعلومات لي دخل المستخدم بواسطة لfonction validateAndUpdate لي كتحقق من ان كل الحقول مملوءة من بعد كنرسل للمعلومات ديال المستخدم الجديدة فل form للسيرفر من خلال لurl وكتلقى الإجابة لي هي عبارة عن رسالة تأكيد التعديل أو الخطأ بالنسبة لل fonction fillFields هي فقط كتمكن من ملأ الحقول بالمعلومات لي سابق للمستخدم دخلها من قبل الكود ديال الملف هو :

                                        
                                            package com.example.darijacoding.restapp.model;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.darijacoding.restapp.model.R;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class UpdateActivity extends AppCompatActivity {
    EditText nom;
    EditText email;
    EditText password;
    StringRequest stringRequest;
    RequestQueue requestQueue;
    String url;
    Button updateBtn;
    private SessionManager session;
    ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);
        nom = (EditText) findViewById(R.id.NomEditText);
        email = (EditText) findViewById(R.id.input_email);
        password = (EditText) findViewById(R.id.input_password);
        updateBtn = (Button) findViewById(R.id.btn_update);
        session = new SessionManager(UpdateActivity.this);
        url = "http://auth.freeoda.com/update.php";
        progressDialog = new ProgressDialog(UpdateActivity.this,ProgressDialog.STYLE_SPINNER);
        fillFields();
        updateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                validateAndUpdate();
            }
        });
    }
    private void validateAndUpdate() {
        if(validate() == true){
            stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try{
                        JSONObject jsonObject = new JSONObject(response);
                        final String success = jsonObject.getString("success");
                        progressDialog.setIndeterminate(true);
                        progressDialog.setMessage("Modification de compte...");
                        progressDialog.show();
                        new android.os.Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                progressDialog.dismiss();
                                Toast.makeText(UpdateActivity.this,success, Toast.LENGTH_SHORT).show();
                                session.LogOutUser();
                                finish();
                            }
                        }, 3000);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(UpdateActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                }
            }){
                @Override
                public Map<String, String> getParams(){
                    Map<String, String> params = new HashMap<>();
                    params.put("id_user",session.getDetails().get("id_user"));
                    Log.v("user_id",session.getDetails().get("id_user"));
                    params.put("nom",nom.getText().toString());
                    params.put("email",email.getText().toString());
                    params.put("password",password.getText().toString());
                    return params;
                }
            };
            requestQueue = Volley.newRequestQueue(UpdateActivity.this);
            requestQueue.add(stringRequest);
        }
    }

    private boolean validate() {
        boolean valid = true;
        String nomUser = nom.getText().toString().trim();
        String emailUser = email.getText().toString().trim();
        String passwordUser = password.getText().toString().trim();
        if (nomUser.isEmpty() || emailUser.isEmpty() || passwordUser.isEmpty()) {
            Toast.makeText(UpdateActivity.this,"Veuillez remplir tous les champs",Toast.LENGTH_LONG).show();
            valid = false;
        }
        return valid;
    }
    private void fillFields() {
        if(session.isLoggedIn()){
            nom.setText(session.getDetails().get("nom"));
            email.setText(session.getDetails().get("email"));
            password.setText(session.getDetails().get("password"));
        }
    }

}

                                        
                                    

كلمات مفاتيح :