كيفاش نصاوب Contacts App بالأندرويد الجزء الثاني

imadbelasri Android
AN

فهاد الجزء الثاني من هاد الدرس غادي نكملو الملفات الأخرى ولي غادي تمكن التطبيق ديالنا من الإشتغال ولي ما شافش الجزء الاول يرجعلو لان هاد الدرس عندو علاقة ب كيفاش نصاوب Contacts App بالأندرويد الجزء الاول.


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


- الملف Contact.java

هاد الملف ولي عبارة عن class كتتضمن المعلومات الخاصة بالمستخدم كما كتمكنا من إسترجاع المعلومات الخاصة بالمستخدم كالإسم وغيره وفيه أيضا واحد الfonction لي كتمكن من وضع هاد المعلومات فواحد الجدول تمهيدا لحفظها فقاعدة البيانات ملي نبغيوها الكود ديال الملف هو :

                                                    
                                                        package com.example.darijacoding.contacts;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;

import java.io.Serializable;

/**
 * Created by Imad on 19/12/2016.
 */
public class Contact implements Serializable{
    private int id;
    private final String name;
    private final String adress;
    private final String email;
    private final String tel;
    private final String site;
    private final double rating;
    public Contact(String name, String adress, String email, String tel, String site, double rating) {
        this.name = name;
        this.adress = adress;
        this.email = email;
        this.tel = tel;
        this.site = site;
        this.rating = rating;
    }
    public Contact(int id, String name, String adress, String email, String tel, String site, double rating) {
        this.id = id;
        this.name = name;
        this.adress = adress;
        this.email = email;
        this.tel = tel;
        this.site = site;
        this.rating = rating;
    }

    public double getStudentRating() {
        return rating;
    }

    public String getName() {
        return name;
    }

    public String getAdress() {
        return adress;
    }

    public String getTel() {
        return tel;
    }

    public String getEmail() {
        return email;
    }

    public String getSite() {
        return site;
    }

    public int getId() {
        return id;
    }
    @Override
    public String toString() {
        return id + " - " + name;
    }

    public ContentValues toContentValues() {
        ContentValues data = new ContentValues();
        data.put("nom",name);
        data.put("adress",adress);
        data.put("tel",tel);
        data.put("email",email);
        data.put("website",site);
        data.put("note",rating);
        return data;
    }
}

                                                    
                                                

- الملف FormActivity.java

هاد الملف غادي يكون فيه الكود لي غادي يمكنا من إضافة contact جديد كما غادي يمكنا أيضا من تعديل contact أولا كيدير التحقق من العملية واش إضافة او تعديل يلا كانت إضافة كيعرض لform فارغة كانت تعديل كيعرض لform مملوءة بالمعلومات ديال ل contact تمهيدا لتعديلها الكود يالو هو :

                                                        
                                                            package com.example.darijacoding.contacts;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;

public class FormActivity extends AppCompatActivity {
    private Button saveStudent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_form);
        if(hasUpdateIntention()){
            Contact student =  getOriginalStudent();
            ContactFormHelper helper = new ContactFormHelper(this);
            helper.fillInTheForm(student);
        }
    }

    private Contact getOriginalStudent() {
        Intent intent = getIntent();
        Contact student = (Contact) intent.getSerializableExtra("student");
        return student;
    }

    private boolean hasUpdateIntention() {
        return getIntent().hasExtra("student");
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_student_form,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == R.id.student_save_item) {
            ContactFormHelper helper = new ContactFormHelper(this);
            Contact student = helper.createStudent();
            //load data from database
            ContactDAO studentDAO = new ContactDAO(this);
            if(hasUpdateIntention()) {
                studentDAO.update(student,getOriginalStudent().getId());
                String message = student.getName()+" modifié' avec succés ";
                Toast.makeText(FormActivity.this,message,Toast.LENGTH_SHORT).show();
            }else{
                studentDAO.insert(student);
                String message = student.getName()+" ajouté' avec succés ";
                Toast.makeText(FormActivity.this,message,Toast.LENGTH_SHORT).show();
            }
            studentDAO.close();
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}

                                                        
                                                    

- الملف ContactDAO.java

هاد الملف غادي يكون فيه الكود لي غادي يمكنا من إضافة قاعدة البيانات كما غادي يمكنا من إضافة جدول ل contacts لقاعدة البيانات وفيه أيضا لfonctions ديال إضافة contact عرض contact نعديل contact مسح contact الكود ديالو هو :

                                                        
                                                            package com.example.darijacoding.contacts;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Imad on 19/12/2016.
 */
public class ContactDAO extends SQLiteOpenHelper{
    public ContactDAO(Context context) {
        super(context,"BaseContact", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String query = "CREATE TABLE contacts (id INTEGER PRIMARY KEY,nom TEXT NOT NULL,adress TEXT,tel TEXT,email TEXT,website TEXT,note REAL);";
        sqLiteDatabase.execSQL(query);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public void insert(Contact student) {
        ContentValues data = student.toContentValues();
        SQLiteDatabase db = getWritableDatabase();
        db.insert("contacts",null,data);
    }

    public List<Contact> listAll() {
        List<Contact> students = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM contacts",null);
        while(cursor.moveToNext()){
            int id = cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("nom"));
            String adress = cursor.getString(cursor.getColumnIndex("adress"));
            String email = cursor.getString(cursor.getColumnIndex("email"));
            String tel = cursor.getString(cursor.getColumnIndex("tel"));
            String site = cursor.getString(cursor.getColumnIndex("website")) ;
            double rating = cursor.getDouble(cursor.getColumnIndex("note"));
            Contact student = new Contact(id,name,adress,email,tel,site,rating);
            students.add(student);
        }
        return students;
    }

    public void  remove(Contact student) {
        SQLiteDatabase db = getWritableDatabase();
        String[] params = {student.getId() + ""};
        db.delete("contacts","id = ?",params);
    }

    public void update(Contact student, int id) {
        ContentValues data = student.toContentValues();
        SQLiteDatabase db = getWritableDatabase();
        String[] params = {id + ""};
        db.update("contacts",data,"id = ?",params);
    }
}

                                                        
                                                    

- الملف ContactFormHelper.java

هاد الملف غادي يكون فيه الكود لي غادي يمكنا من إسترجاع المعلومات لي كاينة فال form و خلق contact بإستعمال fonction createStudent كما كيمكنا من ملء الحقول فحالة نعديل contact الكود النهائي ديالو هو :

                                                        
                                                            package com.example.darijacoding.contacts;

import android.app.Activity;
import android.widget.EditText;
import android.widget.RatingBar;

/**
 * Created by Imad on 19/12/2016.
 */
public class ContactFormHelper {
    private final Activity activity;
    public ContactFormHelper(Activity activity) {
        this.activity = activity;
    }
    private String getName() {
        return getTextFieldValue(R.id.nom);
    }
    private String getAdress() {
        return getTextFieldValue(R.id.adresse);
    }
    private String getEmail() {
        return getTextFieldValue(R.id.email);
    }
    private String getTel() {
        return getTextFieldValue(R.id.tel);
    }
    private String getSite() {
        return getTextFieldValue(R.id.website);
    }
    private double getGrading() {
        RatingBar rating = (RatingBar) activity.findViewById(R.id.rating);
        return rating.getRating();
    }
    private String getTextFieldValue(int fieldId){
        EditText value = (EditText) activity.findViewById(fieldId);
        return value.getText().toString();
    }
    public Contact createStudent() {
        return new Contact(getName(),getAdress(),getEmail(),getTel(),getSite(),getGrading());
    }
    public void fillInTheForm(Contact student) {
        EditText nom = (EditText) activity.findViewById(R.id.nom);
        nom.setText(student.getName());
        EditText email = (EditText) activity.findViewById(R.id.email);
        email.setText(student.getEmail());
        EditText tel = (EditText) activity.findViewById(R.id.tel);
        tel.setText(student.getTel());
        EditText site = (EditText) activity.findViewById(R.id.website);
        site.setText(student.getSite());
        EditText adress = (EditText) activity.findViewById(R.id.adresse);
        adress.setText(student.getAdress());
        RatingBar rating = (RatingBar) activity.findViewById(R.id.rating);
        Float rate = (float) (student.getStudentRating());
        rating.setRating(rate);
    }
}

                                                        
                                                    

- الملف ContactsListActivity.java

هاد الملف غادي يكون فيه الكود لي غادي يمكنا من عرض لائحة كتضم ل contacts لي عندنا فقاعدة البيانات كما غادي يكون فيها لbouton لي غادي يمكنا من التنقل للصفحة الخاصة بإضافة contact جديد كما غادي تكون فيه ل fonctions لي غادي يمكننا من مسح contact بعد الضغظ مطولا على ل contact لي اختاريناه من اللائحة الكود النهائي ديالو :

                                                        
                                                            package com.example.darijacoding.contacts;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

public class ContactsListActivity extends AppCompatActivity {
    private Button createStudent;
    public static ArrayAdapter<Contact> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contacts_list);
        registerForContextMenu(getStudentList());
        getStudentList().setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> studentList, View item, int position, long l) {
                Contact student = (Contact) studentList.getItemAtPosition(position);
                Intent i = new Intent(ContactsListActivity.this,FormActivity.class);
                i.putExtra("student",student);
                startActivity(i);
            }
        });
        createStudent = (Button) findViewById(R.id.createStudent);
        createStudent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(ContactsListActivity.this,FormActivity.class);
                startActivity(i);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadStudents();
    }
    private void loadStudents() {
        ContactDAO studentDAO = new ContactDAO(this);
        List<Contact> students = studentDAO.listAll();
        studentDAO.close();
        adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1,students);
        getStudentList().setAdapter(adapter);
    }
    public ListView getStudentList() {
        return (ListView) findViewById(R.id.studentList);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        if(v.equals(getStudentList())) {
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            final Contact student = (Contact) getStudentList().getItemAtPosition(info.position);
            showContextMenuForStudent(menu, student);
        }
    }

    private void showContextMenuForStudent(ContextMenu menu, final Contact student) {
        MenuItem remove = menu.add("Supprimer");
        remove.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                ContactDAO dao = new ContactDAO(ContactsListActivity.this);
                dao.remove(student);
                dao.close();
                loadStudents();
                Toast.makeText(getApplicationContext(), student.getName() + " est supprimé", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
    }
}