Phone Contacts using Content Provider ,Content Resolver Class using recycleview with checkbox example



Libraries

implementation 'com.android.support:cardview-v7:27.+'implementation 'com.android.support:recyclerview-v7:27.+'implementation 'com.android.volley:volley:1.1.0'




permission 

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>


MainActivity.java


package com.app.android.peppty.hemanthtestpeppty;  
 import android.app.ProgressDialog;  
 import android.content.ContentResolver;  
 import android.database.Cursor;  
 import android.os.AsyncTask;  
 import android.provider.ContactsContract;  
 import android.support.annotation.NonNull;  
 import android.support.v7.app.AppCompatActivity;  
 import android.os.Bundle;  
 import android.support.v7.widget.LinearLayoutManager;  
 import android.support.v7.widget.RecyclerView;  
 import android.util.Log;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.ViewGroup;  
 import android.widget.Button;  
 import android.widget.CheckBox;  
 import android.widget.CompoundButton;  
 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 org.json.JSONArray;  
 import org.json.JSONException;  
 import org.json.JSONObject;  
 import java.util.ArrayList;  
 import java.util.HashMap;  
 import java.util.List;  
 import java.util.Map;  
 import java.util.Timer;  
 import java.util.TimerTask;  
 public class MainActivity extends AppCompatActivity {  
   RecyclerView recycler;  
   Button submit;  
   ContentResolver contentResolver;  
   Cursor cursor;  
   List<CommonBean> CommonBeanList = new ArrayList<>();  
   RecyclerAdapter recyclerAdapter;  
   List<CommonBean> Bean;  
   List<Integer> removaItems = new ArrayList<>();  
   private ProgressDialog mprocessingdialog;  
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     recycler = (RecyclerView) findViewById(R.id.recycler);  
     submit = (Button) findViewById(R.id.submit);  
     contentResolver = getContentResolver();  
     cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);  
     if (cursor != null) {  
       while (cursor.moveToNext()) {  
         int FirstName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);  
         int LastName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);  
         CommonBean commonBean = new CommonBean();  
         commonBean.setFirstName(cursor.getString(FirstName));  
         commonBean.setLastName(cursor.getString(LastName) + "");  
         CommonBeanList.add(commonBean);  
       }  
       cursor.close();  
       recyclerAdapter = new RecyclerAdapter();  
       Bean = new ArrayList<>();  
       Bean.addAll(CommonBeanList);  
       recycler.setLayoutManager(new LinearLayoutManager(this));  
       recycler.setHasFixedSize(true);  
       recycler.setAdapter(recyclerAdapter);  
     }  
     submit.setOnClickListener(new View.OnClickListener() {  
       @Override  
       public void onClick(View v) {  
         for (final int a:removaItems)  
         {  
           Log.e("rlog", "rlog: "+CommonBeanList.get(a).getFirstName()+ " : "+CommonBeanList.get(a).getLastName() );  
 //          http://184.72.145.108/test-con.php  
           Toast.makeText(MainActivity.this, CommonBeanList.get(a).getFirstName()+ " : "+CommonBeanList.get(a).getLastName(),  
               Toast.LENGTH_SHORT).show();  
           new MainActivity.GetFlagsAsync().execute();  
         }  
       }  
     });  
   }  
   class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ContactsViewHolder> {  
     @NonNull  
     @Override  
     public ContactsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  
       LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE);  
       View view = layoutInflater.inflate(R.layout.item, parent, false);  
       ContactsViewHolder contactsViewHolder = new ContactsViewHolder(view);  
       return contactsViewHolder;  
     }  
     @Override  
     public void onBindViewHolder(@NonNull ContactsViewHolder holder, final int position) {  
       if (CommonBeanList != null) {  
         holder.Firstname.setText(CommonBeanList.get(position).getFirstName());  
         holder.Lastname.setText(CommonBeanList.get(position).getLastName());  
         holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {  
           @Override  
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
             if (isChecked) {  
               if (!removaItems.contains(position)) {  
                 removaItems.add(position);  
               }  
             } else {  
             }  
             Log.e("rlog", removaItems.toString());  
           }  
         });  
       }  
     }  
     @Override  
     public int getItemCount() {  
       return CommonBeanList.size();  
     }  
     class ContactsViewHolder extends RecyclerView.ViewHolder {  
       TextView Firstname, Lastname;  
       CheckBox checkbox;  
       public ContactsViewHolder(View itemView) {  
         super(itemView);  
         Firstname = itemView.findViewById(R.id.Firstname);  
         Lastname = itemView.findViewById(R.id.Lastname);  
         checkbox = itemView.findViewById(R.id.checkbox);  
       }  
     }  
   }  
   private class GetFlagsAsync extends AsyncTask<Void, Void, Void> {  
     @Override  
     protected void onPreExecute() {  
       // TODO Auto-generated method stub  
       super.onPreExecute();  
       mprocessingdialog = new ProgressDialog(MainActivity.this);  
       mprocessingdialog.setTitle("Please Wait..");  
       mprocessingdialog.setMessage("Loading");  
       mprocessingdialog.setIndeterminate(true);  
       mprocessingdialog.setCancelable(false);  
       mprocessingdialog.show();  
     }  
     @Override  
     protected Void doInBackground(Void... arg0) {  
       Map<String, String> params = new HashMap<>();  
       try{  
         JSONArray myData=new JSONArray();  
         for (final int a:removaItems)  
         {  
           JSONObject myObj=new JSONObject();  
           myObj.put("name", CommonBeanList.get(a).getFirstName());  
           myObj.put("last_name", CommonBeanList.get(a).getLastName());  
           myData.put(myObj);  
         }  
         params.put("data", myData.toString());  
       }catch (Exception e){  
       }  
 //      JSONObject params = new JSONObject();  
 //      try {  
 //  
 //        for (final int a:removaItems)  
 //        {  
 //          params.put("data", CommonBeanList.get(a).getFirstName());  
 //        }  
 ////        params.put("data", CommonBeanList.getFirstName()+ " : "+CommonBeanList.get(a).getLastName());  
 //  
 //  
 //      } catch (JSONException e) {  
 //        e.printStackTrace();  
 //      }  
       Log.e("rlog" ,params.toString());  
       StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://184.72.145.108/test-con.php",  
           new Response.Listener<String>() {  
             @Override  
             public void onResponse(String response) {  
               Log.e("rlog", "response" + response);  
               try {  
               } catch (Exception e) {  
                 e.printStackTrace();  
               }  
             }  
           }, new Response.ErrorListener() {  
         @Override  
         public void onErrorResponse(VolleyError error) {  
         }  
       });  
       RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);  
       requestQueue.add(stringRequest);  
       return null;  
     }  
     @Override  
     protected void onPostExecute(Void result) {  
       // TODO Auto-generated method stub  
       super.onPostExecute(result);  
       new Timer().schedule(new TimerTask() {  
         @Override  
         public void run() {  
           mprocessingdialog.dismiss();  
         }  
       }, 1000);  
     }  
   }  
 }  




CommonBean.java

package com.app.android.peppty.hemanthtestpeppty;  
 public class CommonBean {  
   String FirstName,LastName;  
   public String getFirstName() {  
     return FirstName;  
   }  
   public void setFirstName(String firstName) {  
     FirstName = firstName;  
   }  
   public String getLastName() {  
     return LastName;  
   }  
   public void setLastName(String lastName) {  
     LastName = lastName;  
   }  
 } 





activity_main.xml

<?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:app="http://schemas.android.com/apk/res-auto"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent"  
   tools:context=".MainActivity"  
   >  
   <LinearLayout  
     android:layout_width="match_parent"  
     android:layout_height="match_parent"  
     android:orientation="vertical"  
     tools:context=".MainActivity"  
     android:layout_margin="15dp">  
     <android.support.v7.widget.RecyclerView  
       android:id="@+id/recycler"  
       android:layout_width="match_parent"  
       android:layout_height="0dp"  
       android:layout_weight="1" />  
     <Button  
       android:id="@+id/submit"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:text="Submit" />  
   </LinearLayout>  
 </LinearLayout>  





item.xml


<?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:app="http://schemas.android.com/apk/res-auto"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content">  
   <android.support.v7.widget.CardView  
     android:layout_width="match_parent"  
     android:layout_height="wrap_content"  
     android:layout_margin="10dp"  
     app:cardCornerRadius="15dp">  
     <RelativeLayout  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content">  
       <CheckBox  
         android:id="@+id/checkbox"  
         android:layout_width="wrap_content"  
         android:layout_height="wrap_content"  
         android:layout_margin="5dp" />  
       <TextView  
         android:id="@+id/Firstname"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:layout_toRightOf="@id/checkbox"  
         android:gravity="center"  
         android:text="First Name"  
         android:textSize="20dp"  
          />  
       <TextView  
         android:id="@+id/Lastname"  
         android:layout_width="match_parent"  
         android:layout_height="wrap_content"  
         android:layout_below="@id/Firstname"  
         android:layout_margin="5dp"  
         android:gravity="center"  
         android:text="Last Name"  
         android:textSize="18dp" />  
     </RelativeLayout>  
   </android.support.v7.widget.CardView>  
 </LinearLayout>