Saturday 23 January 2016

Display web service data in listview and gridview in android.


For integrating JSON service example you need below jar for that
1. apache-mime4j-0.6.jar
2. gson-2.1.jar
3. httpmime-4.0.1,jar
4. json_simple-1.1.jar

layout_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <RelativeLayout
        android:id="@+id/rel_tops"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/img_list_grid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="@dimen/margin_10dp"
            android:layout_alignParentRight="true"
            android:src="@drawable/grid_menu"/>

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/img_list_grid"
            android:cacheColorHint="@android:color/transparent"
            android:divider="@android:color/transparent"
            android:visibility="visible"
            />

        <GridView
            android:id="@+id/grid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:numColumns="2"
            android:layout_below="@+id/img_list_grid"
            android:visibility="gone"

            android:cacheColorHint="@android:color/transparent"
            android:divider="@android:color/transparent"
            />
    </RelativeLayout>



</RelativeLayout>

MainActivity.java
import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import parser.GetPerson; public class MainActivity extends AppCompatActivity {     ImageView mImageViewListGrid;     ListView mListView;     GridView mGridView;     CusTomListAdapter mCusTomListAdapter;     CusTomGridAdapter mCusTomGridAdapter;     PostParseGet mPostParseGet;     GetPerson mGetPerson;     ProgressDialog mProgressDialog;     AllMethods mAllMethods;     ArrayList<GetPerson.PersonDataList>mArrayListPersonDataLists;     boolean isGrid=false;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.layout_main);         /*Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);         setSupportActionBar(toolbar);*/         mImageViewListGrid=(ImageView)findViewById(R.id.img_list_grid);         mListView=(ListView)findViewById(R.id.list);         mGridView=(GridView)findViewById(R.id.grid);         mPostParseGet=new PostParseGet(MainActivity.this);         mGetPerson=new GetPerson();         mArrayListPersonDataLists=new ArrayList<>();         mAllMethods=new AllMethods(MainActivity.this);         if (mAllMethods.check_Internet()==true)         {             new getPersonAsyns().execute();         }         else         {             mAllMethods.ShowDialog(MainActivity.this,"",getString(R.string.net_not_available),"OK");         }         mImageViewListGrid.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 if (isGrid==false)                 {                     mImageViewListGrid.setImageDrawable(getResources().getDrawable(R.drawable.list_menu));                      isGrid=true;                     mListView.setVisibility(View.GONE);                     mGridView.setVisibility(View.VISIBLE);                 }                 else if (isGrid==true)                 {                     mImageViewListGrid.setImageDrawable(getResources().getDrawable(R.drawable.grid_menu));                     isGrid=false;                     mListView.setVisibility(View.VISIBLE);                     mGridView.setVisibility(View.GONE);                 }             }         });     }     public class getPersonAsyns extends AsyncTask<Void,Void,Void>     {         @Override         protected void onPreExecute() {             super.onPreExecute();             mProgressDialog=ProgressDialog.show(MainActivity.this,"","Loading..");         }         @Override         protected Void doInBackground(Void... voids) {             mGetPerson=(GetPerson)mPostParseGet.getPersonDetail(mGetPerson);             return null;         }         @Override         protected void onPostExecute(Void aVoid) {             super.onPostExecute(aVoid);             if (mProgressDialog!=null)             {                 mProgressDialog.dismiss();             }             if (mPostParseGet.isNetError)             {                 mAllMethods.ShowDialog(MainActivity.this,"",getString(R.string.net_not_available),"OK");             }             else if(mPostParseGet.isOtherError)             {                 mAllMethods.ShowDialog(MainActivity.this,"",getString(R.string.slow_internet),"Ok");             }             else             {                 mArrayListPersonDataLists=getPersonData();                 mCusTomListAdapter=new CusTomListAdapter(MainActivity.this,mArrayListPersonDataLists);                 mListView.setAdapter(mCusTomListAdapter);                 mCusTomGridAdapter=new CusTomGridAdapter(MainActivity.this,mArrayListPersonDataLists);                 mGridView.setAdapter(mCusTomGridAdapter);             }         }     }     public ArrayList<GetPerson.PersonDataList> getPersonData() {         ArrayList< GetPerson.PersonDataList> mArrayListParserLog = new ArrayList<  GetPerson.PersonDataList   >();         String  mString="";         for (int i = 0; i < mGetPerson.getContacts().size(); i++) {             GetPerson.PersonDataList  mParserLog = new   GetPerson.PersonDataList();             mParserLog.setName(mGetPerson.getContacts().get(i).getName());             mParserLog.setEmail(mGetPerson.getContacts().get(i).getEmail());             mParserLog.setGender(mGetPerson.getContacts().get(i).getGender());             GetPerson.PhoneDetail mPhoneDetail=new GetPerson.PhoneDetail();             mPhoneDetail.setMobile(mGetPerson.getContacts().get(i).getPhone().getMobile());             mParserLog.setPhone(mPhoneDetail);             mArrayListParserLog.add(mParserLog);         }         return mArrayListParserLog;     }     public class CusTomListAdapter extends BaseAdapter     {         Activity mActivity;         ArrayList<GetPerson.PersonDataList> list;         public CusTomListAdapter(MainActivity mainActivity, ArrayList<GetPerson.PersonDataList> mArrayListPersonDataLists) {             list=mArrayListPersonDataLists;             mActivity=mainActivity;         }         @Override         public int getCount() {             return list.size();         }         @Override         public Object getItem(int i) {             return i;         }         @Override         public long getItemId(int i) {             return i;         }         @Override         public View getView(int i, View convertView, ViewGroup viewGroup) {             LayoutInflater inflator = mActivity.getLayoutInflater();             convertView = inflator.inflate(R.layout.row_list_layout, null);             TextView mTextViewName=(TextView)convertView.findViewById(R.id.row_txt_name);             TextView mTextViewEmail=(TextView)convertView.findViewById(R.id.row_txt_email);             TextView mTextViewGender=(TextView)convertView.findViewById(R.id.row_txt_gender);             TextView mTextViewPh=(TextView)convertView.findViewById(R.id.row_txt_ph);             mTextViewEmail.setText(list.get(i).getEmail());             mTextViewGender.setText("Gender: "+list.get(i).getGender());             mTextViewName.setText(list.get(i).getName());             mTextViewPh.setText(list.get(i).getPhone().getMobile());             return convertView;         }     }     public class CusTomGridAdapter extends BaseAdapter     {         Activity mActivity;         ArrayList<GetPerson.PersonDataList> list;         public CusTomGridAdapter(MainActivity mainActivity, ArrayList<GetPerson.PersonDataList> mArrayListPersonDataLists) {             list=mArrayListPersonDataLists;             mActivity=mainActivity;         }         @Override         public int getCount() {             return list.size();         }         @Override         public Object getItem(int i) {             return i;         }         @Override         public long getItemId(int i) {             return i;         }         @Override         public View getView(int i, View convertView, ViewGroup viewGroup) {             LayoutInflater inflator = mActivity.getLayoutInflater();             convertView = inflator.inflate(R.layout.row_list_layout, null);             TextView mTextViewName=(TextView)convertView.findViewById(R.id.row_txt_name);             TextView mTextViewEmail=(TextView)convertView.findViewById(R.id.row_txt_email);             TextView mTextViewGender=(TextView)convertView.findViewById(R.id.row_txt_gender);             TextView mTextViewPh=(TextView)convertView.findViewById(R.id.row_txt_ph);             mTextViewEmail.setText(list.get(i).getEmail());             mTextViewGender.setText("Gender: "+list.get(i).getGender());             mTextViewName.setText(list.get(i).getName());             mTextViewPh.setText(list.get(i).getPhone().getMobile());             return convertView;         }     }     @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.menu_main, menu);         return true;     }     @Override     public boolean onOptionsItemSelected(MenuItem item) {         // Handle action bar item clicks here. The action bar will         // automatically handle clicks on the Home/Up button, so long         // as you specify a parent activity in AndroidManifest.xml.         int id = item.getItemId();         //noinspection SimplifiableIfStatement         if (id == R.id.action_settings) {             return true;         }         return super.onOptionsItemSelected(item);     } }
GetPerson.java
package parser; import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; import java.util.List; public class GetPerson implements Parcelable { public List<PersonDataList> contacts; public List<PersonDataList> getContacts() { return contacts; } public void setContacts(List<PersonDataList> contacts) { this.contacts = contacts; } public GetPerson(){ contacts=new ArrayList<PersonDataList>(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { } public static Creator<GetPerson> CREATOR = new Creator<GetPerson>() { @Override public GetPerson[] newArray(int size) { return new GetPerson[size]; } @Override public GetPerson createFromParcel(Parcel source) { return new GetPerson(source); } }; public GetPerson(Parcel in) { contacts=new ArrayList<PersonDataList>(); in.readTypedList(contacts, PersonDataList.CREATOR); } public static class PersonDataList implements Parcelable { String name=""; String email=""; String gender=""; public PhoneDetail phone; public PhoneDetail getPhone() { return phone; } public void setPhone(PhoneDetail phone) { this.phone = phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int i) { dest.writeString(name); dest.writeString(email); dest.writeString(gender); dest.writeParcelable(phone, i); } public static Creator<PersonDataList> CREATOR = new Creator<PersonDataList>() { @Override public PersonDataList[] newArray(int size) { return new PersonDataList[size]; } @Override public PersonDataList createFromParcel(Parcel source) { return new PersonDataList(source); } }; public PersonDataList(Parcel in) { name = in.readString(); email = in.readString(); gender = in.readString(); phone = (PhoneDetail) in.readParcelable(PhoneDetail.class.getClassLoader()); } public PersonDataList(){} } public static class PhoneDetail implements Parcelable { String mobile=""; public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int i) { dest.writeString(mobile); } public static Creator<PhoneDetail> CREATOR = new Creator<PhoneDetail>() { @Override public PhoneDetail[] newArray(int size) { return new PhoneDetail[size]; } @Override public PhoneDetail createFromParcel(Parcel source) { return new PhoneDetail(source); } }; public PhoneDetail (){} public PhoneDetail(Parcel in) { mobile = in.readString(); } } }
import android.app.Activity; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v4.app.FragmentActivity; import com.google.gson.Gson; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import java.io.File; import java.util.ArrayList; import java.util.List; import parser.GetPerson; public class PostParseGet { public Activity mContext; public boolean isNetError = false; public boolean isOtherError = false; public boolean isDeviceToken = false; List<NameValuePair> nameValuePairs; Object mFillObject; public static ArrayList<String> mflist; ConnectivityManager mConnectivityManager; NetworkInfo mNetworkInfo; Gson mGson; public PostParseGet(Activity context) { mContext = context; mGson = new Gson(); mflist = new ArrayList<String>(); } public PostParseGet(FragmentActivity context) { mContext = context; mGson = new Gson(); mflist = new ArrayList<String>(); } public Object getmFillObject() { return mFillObject; } public void setmFillObject(Object mFillObject) { this.mFillObject = mFillObject; } public boolean isDeviceToken() { return isDeviceToken; } public void setDeviceToken(boolean isDeviceToken) { this.isDeviceToken = isDeviceToken; } /** * Function checks internet if avail, Post data to particular Url and filled * json object relating to the response. * * @param string * @param nameValuePairs * @param object * @param context * @return object * @throws CustomException */ public Object postHttpURL(String url, List<NameValuePair> nameValuePairs, Object mObject) { HttpPost httppost; HttpParams httpParameters; int timeoutConnection = 60000; HttpClient httpclient = null; HttpResponse response = null; String data = ""; isOtherError = false; System.out.println("Url " + url); mFillObject = null; if (check_Internet()) { try { mFillObject = mObject.getClass().newInstance(); /*HostnameVerifier hostnameVerifier = SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; DefaultHttpClient client = new DefaultHttpClient(); SchemeRegistry registry = new SchemeRegistry(); SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); registry.register(new Scheme("https", socketFactory, 443)); SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry); DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams()); // Set verifier HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);*/ // HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); httppost = new HttpPost(url); httpParameters = new BasicHttpParams(); // HttpConnectionParams.setSoTimeout(httpParameters, timeoutConnection); HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); httpclient = new DefaultHttpClient(httpParameters); MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); System.out.println("nameValuePairs " + nameValuePairs.size()); if (nameValuePairs != null) { for (int index = 0; index < nameValuePairs.size(); index++) { String paramName = nameValuePairs.get(index).getName(); String paramValue = nameValuePairs.get(index).getValue(); System.out.println("paramName " + paramName); System.out.println("paramValue " + paramValue); if (paramName.equalsIgnoreCase("docsimage") || paramName.equalsIgnoreCase("faceimage")) { if (paramValue.length() > 0) { /*if (paramValue.equalsIgnoreCase("Female-Avatar.png")||paramValue.equalsIgnoreCase("avatar-man.jpg") ) { entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue())); } else {*/ entity.addPart(paramName, new FileBody(new File(paramValue))); //} } } else { // mflist.clear(); entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue())); } } httppost.setEntity(entity); } response = httpclient.execute(httppost); System.out.println("httppost " + httppost.toString()); data = EntityUtils.toString(response.getEntity()); System.out.println("Final Data " + data); if (data.equalsIgnoreCase("{\"is_device_deleted\":true}")) setDeviceToken(true); mFillObject = mGson.fromJson(data, mFillObject.getClass()); } catch (Exception e) { isOtherError = true; e.printStackTrace(); } } return mFillObject; } /** * Function * Takes and keeps a reference of the passed context in order to Check whether Internet is available or not. * * @param context * @return The return will be true if the internet is available and false if not. */ public boolean check_Internet() { mConnectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null && mNetworkInfo.isConnectedOrConnecting()) { isNetError = false; return true; } else { isNetError = true; return false; } } public Object getPersonDetail(GetPerson mGetFlag) { nameValuePairs = new ArrayList<NameValuePair>(); return postHttpURL("http://api.androidhive.info/contacts/", nameValuePairs, mGetFlag); } }

Manage layout in multiple device in android

First of all create res folder structure as below image.





In above image you can see like for image make drawable folder like below

for mobile

drawable-hdpi (normal size mobile like 480x800, 480x854 etc.. )
drawable-xhdpi (high resolution scree like 1080x1920, 768x1280 etc..)
drawable-xxhdpi (very high resolution 1440x2560)

for 7 inch tablet
drawable-large


for 10 inch tablet
drawable-xlarge


For making layout folder

for Mobile
layout

for 7 inch
layout-sw600dp-port (portrait)
layout-sw600dp-land (landscape)

for 10 inch
layout-sw720dp-port (portrait)
layout-sw720dp-land (landscape)

For making values folder

for Mobile
values-hdpi
values-xhdpi

for Tablet 7 inch
values-large

for Tablet 10 inch
values-xlarge


And inside values/dimens.xml folder set different value for all folder so you can manage in all verison of device as well as tablet  

SQLite example for CRUD operation in Android


DatabaseConnectionAPI.java

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

public class DatabaseConnectionAPI extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contact table name
private static final String TABLE_CONTACTS = "contacts";

// Contact Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";

public DatabaseConnectionAPI(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
+ KEY_PH_NO + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

// Create tables again
onCreate(db);
}

/**
* All CRUD(Create, Read, Update, Delete) Operations
*/

// Adding new contact
public int addContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName()); // Contact Name
values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

// Inserting Row
int i= (int) db.insert(TABLE_CONTACTS, null, values);
db.close(); // Closing database connection
return i;
}

// Getting single contact
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();

Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
// return contact
return contact;
}

// Getting All Contact
public ArrayList<Contact> getAllContacts() {
ArrayList<Contact> contactList = new ArrayList<Contact>();
// Select All Query
String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}

// return contact list
return contactList;
}

// Updating single contact
public int updateContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_NAME, contact.getName());
values.put(KEY_PH_NO, contact.getPhoneNumber());

// updating row
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
}

// Deleting single contact
public void deleteContact(String id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] { id });
db.close();
}


// Getting contacts Count
public int getContactsCount() {
String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();

// return count
return cursor.getCount();
}

}

layout_add.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="@dimen/margin_10dp"
    android:layout_height="match_parent">


    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_email"
        android:layout_width="match_parent"
         android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/margin_10dp">

        <EditText
            android:id="@+id/edt_email"
            style="@style/Edittext"
            android:hint="Name" />

    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_pass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_layout_email">

        <EditText
            android:id="@+id/edt_password"
            style="@style/Edittext"
            android:hint="Phone"
            android:maxLength="10"
            android:inputType="phone" />

    </android.support.design.widget.TextInputLayout>

    <TextView
        android:id="@+id/txt_login"
        style="@style/LargeTextView"
        android:layout_below="@+id/input_layout_pass"
        android:layout_centerHorizontal="true"

        android:layout_marginTop="@dimen/margin_20dp"
         android:padding="@dimen/margin_10dp"
        android:text="ADD CONTACT"
        android:textColor="@color/colorPrimary" />


</RelativeLayout>

layout_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/txt_no_data"
        style="@style/LargeTextView"
        android:text="There are no any data added yet."
        android:layout_centerHorizontal="true"
        android:layout_margin="@dimen/margin_10dp"/>
    <RelativeLayout
        android:id="@+id/rel_tops"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
             android:cacheColorHint="@android:color/transparent"
            android:divider="@android:color/transparent"
            android:visibility="visible"
            />


    </RelativeLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_input_add" />

</RelativeLayout>

row_list_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <android.support.v7.widget.CardView
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        card_view:cardCornerRadius="2dp"
        card_view:contentPadding="10dp">
    <RelativeLayout
        android:id="@+id/rel_top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp">

        <TextView
            android:id="@+id/row_txt_name"
            style="@style/LargeTextView"
            android:text="Name"/>


        <TextView
            android:id="@+id/row_txt_ph"
            style="@style/NormalTextView"
            android:layout_below="@+id/row_txt_name"
            android:text="Name"/>


    </RelativeLayout>
    </android.support.v7.widget.CardView>
</RelativeLayout>

AddContact.java

package com.example.sphere65.sqlitedemoexample;

 import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;



public class AddContact extends AppCompatActivity {

    TextInputLayout mTextInputLayoutEmail;
    EditText mEditTextEmail;

    TextInputLayout mTextInputLayoutPassword;
    EditText mEditTextPassword;

     TextView mTextViewLogin;
        DatabaseConnectionAPI mDatabaseConnectionAPI;
      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_add);
          mDatabaseConnectionAPI=new DatabaseConnectionAPI(this);

        mTextInputLayoutEmail=(TextInputLayout)findViewById(R.id.input_layout_email);
        mTextInputLayoutPassword=(TextInputLayout)findViewById(R.id.input_layout_pass);
        mEditTextEmail=(EditText)findViewById(R.id.edt_email);
        mEditTextPassword=(EditText)findViewById(R.id.edt_password);

        mTextViewLogin=(TextView)findViewById(R.id.txt_login);

        mEditTextEmail.addTextChangedListener(new MyTextWatcher(mEditTextEmail));
        mEditTextPassword.addTextChangedListener(new MyTextWatcher(mEditTextPassword));
        mTextViewLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginDone();

            }
        });



    }



    private void loginDone() {


        if (!validateEmail()) {
            return;
        }

       else if (!validatePassword()) {
            return;
        }
        else
        {



           int i= mDatabaseConnectionAPI.addContact(new Contact(mEditTextEmail.getText().toString(), mEditTextPassword.getText().toString()));
            if (i>0)
            {
                Toast.makeText(getApplicationContext(), "Data inserted successfully.", Toast.LENGTH_SHORT).show();
                clearAllField();
                finish();
            }
         

        }

    }


    public void clearAllField()
    {

        mEditTextEmail.clearFocus();
        mEditTextPassword.clearFocus();
     }
    private boolean validateEmail() {
        String email = mEditTextEmail.getText().toString().trim();

        if (email.isEmpty()  ) {
            mTextInputLayoutEmail.setError("Enter name");
            requestFocus(mEditTextEmail);
            return false;
        } else {
            mTextInputLayoutEmail.setErrorEnabled(false);
        }

        return true;
    }

    private boolean validatePassword() {
        if (mEditTextPassword.getText().toString().trim().isEmpty()) {
            mTextInputLayoutPassword.setError("Enter Phone");
            requestFocus(mEditTextPassword);
            return false;
        } else {
            mTextInputLayoutPassword.setErrorEnabled(false);
        }

        return true;
    }


    private void requestFocus(View view) {
        if (view.requestFocus()) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
    private class MyTextWatcher implements TextWatcher {

        private View view;

        private MyTextWatcher(View view) {
            this.view = view;
        }

        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        public void afterTextChanged(Editable editable) {
            switch (view.getId()) {

                case R.id.edt_email:
                    validateEmail();
                    break;
                case R.id.edt_password:
                    validatePassword();
                    break;
            }
        }
    }
}

EditContact.java

package com.example.sphere65.sqlitedemoexample;
import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class EditContact extends AppCompatActivity {

    TextInputLayout mTextInputLayoutEmail;
    EditText mEditTextEmail;

    TextInputLayout mTextInputLayoutPassword;
    EditText mEditTextPassword;

    TextView mTextViewLogin;
    DatabaseConnectionAPI mDatabaseConnectionAPI;
    Contact mContact;
    String value = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_add);
        mDatabaseConnectionAPI = new DatabaseConnectionAPI(this);

        Bundle extras = getIntent().getExtras();

        if (extras != null) {
            value = extras.getString("id");
        }
        mContact = new Contact();
        mContact = mDatabaseConnectionAPI.getContact(Integer.parseInt(value));


        mTextInputLayoutEmail = (TextInputLayout) findViewById(R.id.input_layout_email);
        mTextInputLayoutPassword = (TextInputLayout) findViewById(R.id.input_layout_pass);
        mEditTextEmail = (EditText) findViewById(R.id.edt_email);
        mEditTextPassword = (EditText) findViewById(R.id.edt_password);

        mTextViewLogin = (TextView) findViewById(R.id.txt_login);

        mEditTextEmail.addTextChangedListener(new MyTextWatcher(mEditTextEmail));
        mEditTextPassword.addTextChangedListener(new MyTextWatcher(mEditTextPassword));
        mTextViewLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginDone();

            }
        });
        mEditTextEmail.setText(mContact.getName());
        mEditTextPassword.setText(mContact.getPhoneNumber());
        mTextViewLogin.setText("EDIT CONTACT");

    }


    private void loginDone() {


        if (!validateEmail()) {
            return;
        } else if (!validatePassword()) {
            return;
        } else {


            int i = mDatabaseConnectionAPI.updateContact(new Contact(mEditTextEmail.getText().toString(), mEditTextPassword.getText().toString(), Integer.parseInt(value)));
            if (i > 0) {
                Toast.makeText(getApplicationContext(), "Data updated successfully.", Toast.LENGTH_SHORT).show();
                clearAllField();
                finish();
            }
             

        }

    }


    public void clearAllField() {

        mEditTextEmail.clearFocus();
        mEditTextPassword.clearFocus();
    }

    private boolean validateEmail() {
        String email = mEditTextEmail.getText().toString().trim();

        if (email.isEmpty()) {
            mTextInputLayoutEmail.setError("Enter name");
            requestFocus(mEditTextEmail);
            return false;
        } else {
            mTextInputLayoutEmail.setErrorEnabled(false);
        }

        return true;
    }

    private boolean validatePassword() {
        if (mEditTextPassword.getText().toString().trim().isEmpty()) {
            mTextInputLayoutPassword.setError("Enter Phone");
            requestFocus(mEditTextPassword);
            return false;
        } else {
            mTextInputLayoutPassword.setErrorEnabled(false);
        }

        return true;
    }


    private void requestFocus(View view) {
        if (view.requestFocus()) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }

    private class MyTextWatcher implements TextWatcher {

        private View view;

        private MyTextWatcher(View view) {
            this.view = view;
        }

        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        public void afterTextChanged(Editable editable) {
            switch (view.getId()) {

                case R.id.edt_email:
                    validateEmail();
                    break;
                case R.id.edt_password:
                    validatePassword();
                    break;
            }
        }
    }
}


ContactListActivity.java

package com.example.sphere65.sqlitedemoexample;
import java.util.ArrayList;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;


public class ContactListActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    DatabaseConnectionAPI db;
    ListView mListView;
    CusTomListAdapter mCusTomListAdapter;
    ArrayList<Contact> contacts;
    TextView mTextViewNoData;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);

          db = new DatabaseConnectionAPI(this);
        mTextViewNoData=(TextView)findViewById(R.id.txt_no_data);
        mListView = (ListView) findViewById(R.id.list);
        /**
         * CRUD Operations
         * */
        // Inserting Contact
        /*Log.d("Insert: ", "Inserting ..");
        db.addContact(new Contact("Harshal", "9100000000"));
        db.addContact(new Contact("Srinivas", "9199999999"));
        db.addContact(new Contact("Tommy", "9522222222"));
        db.addContact(new Contact("Karthik", "9533333333"));*/

        // Reading all contacts
        Log.d("Reading: ", "Reading all contacts..");
          contacts = db.getAllContacts();
        if (contacts.size()>0)
        {
            mCusTomListAdapter=new CusTomListAdapter(AndroidSQLiteTutorialActivity.this,contacts);
            mListView.setAdapter(mCusTomListAdapter);
            mTextViewNoData.setVisibility(View.GONE);
            mListView.setVisibility(View.VISIBLE);
        }
        else
        {
            mTextViewNoData.setVisibility(View.VISIBLE);
            mListView.setVisibility(View.GONE);
        }

        for (Contact cn : contacts) {
            String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber();
            // Writing Contact to log
            Log.d("Name: ", log);

        }
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /*Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();*/
                Intent mIntent=new Intent(AndroidSQLiteTutorialActivity.this,AddContact.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(mIntent);
            }
        });
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view,final int i, long l) {
                CharSequence colors[] = new CharSequence[] {"Edit", "Delete"};

                AlertDialog.Builder builder = new AlertDialog.Builder(AndroidSQLiteTutorialActivity.this);
                builder.setTitle("Choose Action");
                builder.setItems(colors, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (which == 0) {
                            Intent mIntent = new Intent(AndroidSQLiteTutorialActivity.this, EditContact.class);
                            mIntent.putExtra("id", String.valueOf(contacts.get(i).getID()));
                            startActivity(mIntent);
                        } else {
                            db.deleteContact(String.valueOf(contacts.get(i).getID()));
                            contacts = db.getAllContacts();
                            if (contacts.size() > 0) {
                                mCusTomListAdapter = new CusTomListAdapter(AndroidSQLiteTutorialActivity.this, contacts);
                                mListView.setAdapter(mCusTomListAdapter);
                                mTextViewNoData.setVisibility(View.GONE);
                                mListView.setVisibility(View.VISIBLE);
                            } else {
                                mListView.setVisibility(View.GONE);
                                mTextViewNoData.setVisibility(View.VISIBLE);
                            }


                        }

                    }
                });
                builder.show();
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        ArrayList<Contact> contacts = db.getAllContacts();
        if (contacts.size()>0)
        {
            mCusTomListAdapter=new CusTomListAdapter(AndroidSQLiteTutorialActivity.this,contacts);
            mListView.setAdapter(mCusTomListAdapter);
            mListView.setVisibility(View.VISIBLE);
            mTextViewNoData.setVisibility(View.GONE);
        }
        else
        {
            mListView.setVisibility(View.GONE);
            mTextViewNoData.setVisibility(View.VISIBLE);
        }

    }

    public class CusTomListAdapter extends BaseAdapter {

        Activity mActivity;
        ArrayList<Contact> list;



        public CusTomListAdapter(AndroidSQLiteTutorialActivity mainActivity, ArrayList<Contact> contacts) {
            list =  contacts;
            mActivity = mainActivity;

        }


        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int i) {
            return i;
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View convertView, ViewGroup viewGroup) {
            LayoutInflater inflator = mActivity.getLayoutInflater();
            convertView = inflator.inflate(R.layout.row_list_layout, null);
            TextView mTextViewName = (TextView) convertView.findViewById(R.id.row_txt_name);
            TextView mTextViewPh = (TextView) convertView.findViewById(R.id.row_txt_ph);

            mTextViewName.setText(list.get(i).getName());
            mTextViewPh.setText(list.get(i).getPhoneNumber());

            return convertView;
        }
    }

}