Wednesday, March 20, 2013

d. Databse and Spinner Tutorial

In this Tutorial you will learn how to retrieve the Data from a Database through Android Application and how to use a spinner to select database data.(spinner is nothing but the modified form of drop down list used in html) The Database supported in Android is "SQLITE", which is a light open source Database which can be used for data insertion in Linux and Windows. SQL Database will run in all Android Devices without any pre installation or setup.

(TIP)source code is avialble at the bottom

There are two method by which you can use a Database in Android. One is by creating a Database through the application and insetion of data through the Java code itself. The other one is by attaching a Database with data to the application. Even though the first method seems to be simpler, if you want to insert say 50 data in to the database it is quite difficult and your code will look shabby. Editing the data and finding the data in code will also be difficult. In the second method we add data to the Database externally using a Database Manager and and attach it to the application in "assets" folder. The data insertion using this method is very simple and fast, even any external person can do this job.Here we are going to learn the second method

The first thing to do is downloading a suitable SQLITE database manger. I will suggest you to use Database Manger comes as a Firefox extension. It very low in size and easy to use with all facilities. Just search SQLite manger in Firefox addons (Tools>addons in Firefox). After getting the Database Manger we have to insert data in to it.

Click Tools>SQLite manger in Firefox and Click create database and give the name "Sample_database"
then create a new table named data as shown in the figure below.



Give the table name as "data". Now insert the following column names respectively, "name","age","sex"and _id"
click ok to create the table as shown below.


From the "browse and search" tab click "add" to add a new record and give the details as follows name:arise,age:31,sex:Male,_id:1 click ok to create the record.



Similarly add the following data to the table
name:Raman,age:40,sex:Male,_id:2 then,
name:Sita,age:35, sex:Female,_id:3

Inorder the database to be worked on Android we have to add a table named "Android Metadata". We can add this through script. "Click Execute SQL" tab and copy pase the following two lines one by one, as shown in figure below.


CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US'

INSERT INTO "android_metadata" VALUES ('en_US')




Now our database is ready to attach with the application. The database file will have sqlite extension it is not required so delete the extension.

Now create a new project named "Database" with package name "com.example.database"

Here we are creating a spinner for getting the data from user and a button to execute the Database operation. The result will be displayed in a Table Layout. A TextView will be used for showing the instruction to the user.
copy the following code in to the activity_main.xml file
Also copy the Database file just we have created named "Sample_database" in to assets folder.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Find the Database data based on gender" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="170dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"       
         />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"      
         android:onClick="RunDatabse"
        android:text="Button" />
   

    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="13dp"      
        android:stretchColumns="*"
         >
                
    </TableLayout>

</LinearLayout>


Now in the MainActivity.java file copy the following code. the step by step information is given as comments so read the comments.

package com.example.database;

import java.io.IOException;
import android.app.Activity;
import android.content.res.Resources;
import android.database.SQLException;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Toast;

public class MainActivity extends Activity {
    private String[] mystring;//creating a string array named mystring
    Spinner samplespinner; //Assigning a name for spinner
    String[] DataToDB;//defining a string array named DataToDB
    String[]result_array;//defining an array for saving the results obtained from DB
    String Selecteditem;//Defining a string for storing selected item from spinner

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ///////////////////SPINNER/////////////////////////
       
        ArrayAdapter sampleadapter;//Assigning a name for ArrayAdapter
       
        Resources res = getResources();//Assigning a name for Resources
       
        mystring = res.getStringArray(R.array.Sex);//getting the array items to string named my string
        //mystring is an array which is defined on the top
       
        samplespinner= (Spinner) findViewById(R.id.spinner1); //samplespinner is defined in the top      
        //samplespinner is the name given to the spinner at the top
       
        sampleadapter = new ArrayAdapter<String>(this,
                                        android.R.layout.simple_spinner_item, mystring);
        samplespinner.setAdapter(sampleadapter);
      
        samplespinner.setOnItemSelectedListener(new OnItemSelectedListener()
            {
               public void onItemSelected(AdapterView<?> arg0, View arg1,
                                                        int arg2, long arg3)
                {
                //Toast.makeText(getBaseContext(), spVIA.getSelectedItem().toString(),
                //Toast.LENGTH_LONG).show();
               
                Selecteditem = samplespinner.getSelectedItem().toString();
                                        }
                        public void onNothingSelected(AdapterView<?> arg0)
                        {
                                        // TODO Auto-generated method stub                
                        }
            });}   
    //////////////////////////SPINNER ENDS///////////////////////////////////////////////////
       
    ////////////////////////////DATABASE////////////////////////////////////////////////////
        public void RunDatabse(View view) {
            DatabaseHelper myDbHelper = new DatabaseHelper(this);
            //Toast.makeText(this,Selecteditem,Toast.LENGTH_LONG).show();
           
            try {
           
            myDbHelper.createDataBase();
            DataToDB = myDbHelper.ReadFromDB(Selecteditem.trim());//sending the selected spinner item to database for query
            TableLayout tablelayout1= (TableLayout)findViewById(R.id.tableLayout1);
            tablelayout1.removeAllViews();
            //Adding raws to the Table dynamically
            for(int i=0;i < DataToDB.length;i++)//repeat adding raws to the table layout till the string array length ends
            {
              
                  
                    TableRow tR = new TableRow(this);
                    result_array = DataToDB[i].split(","); //splitting the comma separated string array
                       //result_array is the string array for storing result.it is defined in top          
                    tR.setPadding(5,5,5,5); //setting spacing between table raws            
                    TextView tV_txt1 = new TextView(this);//adding textViews to each Table cell
                    TextView tV_txt2 = new TextView(this);
                    TextView tV_txt3 = new TextView(this);
                            
                             
                    tV_txt1.setText(result_array[0]);//setting the first array item to text view
                   
                   
                    tV_txt2.setText(result_array[1]);
                   
                   
                    tV_txt3.setText(result_array[2]);
                  
                   
                              
                    tR.addView(tV_txt1);
                    tR.addView(tV_txt2);
                    tR.addView(tV_txt3);
                   

                    tablelayout1.addView(tR);//Adding all Table raws to the Table
               
            }
           
    }
     catch (IOException ioe) {
           
            throw new Error("Unable to create database");
           
            }
           
            try {
           
            try {
                myDbHelper.openDataBase();
            } catch (java.sql.SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
            }catch(SQLException sqle){
           
            throw sqle;
           
            }
        }
}



Here what we are doing is first loading the data stored in the Strings.xml file in to the spinner. The value of spinner items will be stored in to an string and it will be send to the database for query. The database will be read using code through a new java file which will be explained later.

Now copy the following code in to the strings.xml file in the values folder,

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">database</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <item type="string" name="databaseVersion" format="integer">1</item>
<string-array name="Sex">
    <item >Male</item>
    <item >Female</item>
   
</string-array>
</resources>


Here the string array name is "SEX" and the vlaues of array will be (Male, Female) which will be given as items. So What we are going to do is when the user select the Gender ie. Male or Female the data corresponding in the database will be shown to the user.

Now create a new CLass (Java file) called "DatabaseHelper" by right clicking on the package name "com.example.database" and select new>class give the above name for the java file.
Now cpy pase the following code in to the java file,

package com.example.database;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
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.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class DatabaseHelper extends SQLiteOpenHelper{
   
//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.example.database/databases/";


private static String DB_NAME = "Sample_databse";//name of your Database

private SQLiteDatabase myDataBase;

private final Context myContext;

/**
  * Constructor
  * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
  * @param context
  */
public DatabaseHelper(Context context) {

    super(context, DB_NAME, null, 1);
    this.myContext = context;
}

/**
  * Creates a empty database on the system and rewrites it with your own database.
  * */
public void createDataBase() throws IOException{

    boolean dbExist = checkDataBase();




if(dbExist)
   {
    //do nothing - database already exist
   
    //Toast.makeText(this.myContext,"Db Exists",Toast.LENGTH_LONG).show();
   
   
    }
else{

        //By calling this method and empty database will be created into the default system path
        //of your application so we are gonna be able to overwrite that database with our database.
        this.getReadableDatabase();
       
        //Toast.makeText(this.myContext,"Create new DB",Toast.LENGTH_LONG).show();
       
        try {
       
        copyDataBase();
       
        //Toast.makeText(this.myContext,"Copy DB",Toast.LENGTH_LONG).show();
       
        } catch (IOException e) {
       
        throw new Error("Error copying database");
       
        }
    }


}


    public String[] ReadFromDB(String Selecteditem) {
       // Retrieve a string array of all our Data
    //Toast.makeText(this.myContext,"Read From DB",Toast.LENGTH_LONG).show();
   
    ArrayList temp_array = new ArrayList();
    String[] notes_array = new String[0];
    //The SQL Query
 
  
    String sqlQuery = "SELECT * FROM data where sex = '"+ Selecteditem +"'"  ;      
   
    //Here we are querying the databse with the selected item from the spinner. Only the data with the selected item will be retrieved from the database          
   
    //Define database and cursor
   
    //Toast.makeText(this.myContext,sqlQuery,Toast.LENGTH_LONG).show();
   
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor c = db.rawQuery(sqlQuery, null);

    //Loop through the results and add it to the temp_array
        //You shoud give the column names in the Database exactly here below        
             
              if (c.moveToFirst()){
                  do{
                        temp_array.add(  c.getString(c.getColumnIndex("name")) +
                                       "," + c.getString(c.getColumnIndex("age")) +
                                       "," + c.getString(c.getColumnIndex("sex"))                                     
                                     );
                       
              //Toast.makeText(this.myContext,c.getString(c.getColumnIndex("TIME")),Toast.LENGTH_LONG).show();
             
             
              
             
        }while(c.moveToNext());
     }
    //Close the cursor
    c.close();
    //Transfer from the ArrayList to string array
    notes_array = (String[]) temp_array.toArray(notes_array);
    //Return the string array
    return notes_array;
  }
   

    
/**
  * Check if the database already exist to avoid re-copying the file each time you open the application.
  * @return true if it exists, false if it doesn't
  */
private boolean checkDataBase(){

        SQLiteDatabase checkDB = null;
       
        //Toast.makeText(this.myContext,"check db",Toast.LENGTH_LONG).show();
       
        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
       
        //Toast.makeText(this.myContext,myPath,Toast.LENGTH_LONG).show();
           
           
        }catch(SQLiteException e){
       
            //Toast.makeText(this.myContext,"DB Does not exists",Toast.LENGTH_LONG).show();
           
        //database does't exist yet.
       
        }
       
        if(checkDB != null){
       
            checkDB.close();
       
        }
       
        return checkDB != null ? true : false;
}

/**
  * Copies your database from your local assets-folder to the just created empty database in the
  * system folder, from where it can be accessed and handled.
  * This is done by transfering bytestream.
  * */
private void copyDataBase() throws IOException{

        //Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);
       
        // Path to the just created empty db

        String outFileName = DB_PATH + DB_NAME;
       
        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);
       
        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
        }
       
        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

}

public void openDataBase() throws SQLException{

        //Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
       



}

@Override
public synchronized void close() {

    if(myDataBase != null)
    myDataBase.close();
   
    super.close();

}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

    // Add your public helper methods to access and get content from the database.
    // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
    // to you to create adapters for your views.

}


Android cannot execute the database directly from the asset folder so it first load it in to the system folder and run it from there. Your database will be stored in the following location "/data/data/com.example.database/databases/" with the name "Sample_databse"


the data is retrived from the database using cursor the following code
"SELECT * FROM data where sex = '"+ Selecteditem +"'"  

The criteria for selecting the data is passing through the string named  "Selecteditem" which was used to store the selected item from the spinner. So if the criteria ie the sex column matches the selected item in spinner for example "Male" all the data having the gender as "male" will be retrived and shown to the user. In the cursor you should give the exact column name given in the Database (See he comment in the code) Then we store it in a string array and pass it back to the MainActivity to show the result in the Table Layout. Here we don't know how many data will be retrieved so we use a dynamic (automatically adding raws to the Table layout) method to display the data. Please note that in Table layout we have to add TextViews to each cell in order to display the text.

When you run the application you will get the result as follows,




Now we have learn how to use a spinner,SQLite database and Table Layout.
You may download the code by clicking the following link

DOWNLOAD SOURCE CODE



157 comments:

  1. Hai,
    I am a fresher.i want one program.just having two edit text and one button.In first edit text we entered the date and the second edit text just enter one name after that click the ok button it will be stored in database.
    Then another one edittext and one button in the same layout.In this edittext enter the date and click the search button which fetch the match result from that date and display the result below the same activity in list view manner.please send my mail id deesh003@gmail.com
    Regards
    Satheesh.R

    ReplyDelete
  2. Nice post.Give it up. Thanks for share this article. For more visit:Web App Development

    ReplyDelete
  3. I run the project in emulator.
    it shows the screen with the Spinner control & allows me to choose values.
    after choosing a value ,

    Unfortunately Database has stopped and application closes.

    Please help to move further with this error.
    Thanks in Advance.

    ReplyDelete
    Replies
    1. Uninsall the application from emulator by clicking Menu>settings>app>uninstall and then run the application again.

      Delete
    2. I tried Uninstalling the application and run it again via Emulator but still getting the same error

      Delete
    3. Then try renaming the database file in the asset folder and give another name also change the name in the code (private static String DB_NAME = "Sample_databse";). If that does not work uncomment all the toast which are given in the code and see anything is displayed in the toast or not

      Delete
    4. This comment has been removed by the author.

      Delete
    5. This comment has been removed by the author.

      Delete
    6. Hi. I am also getting the same issue. Please help me to sort out this please

      Delete
  4. This comment has been removed by the author.

    ReplyDelete
  5. The source you provided worked out fine for me peter. Now i started up with my Android Application Development. Thanks a lot.

    One more genral issue i'm facing is, In my eclipse ADT Environment, i can't able to open my Android SDK manager by either clicking on the icon in the toolbar or by clicking Window---> Android SDK manager(In these 2 cases it Shows : Starting Android SDK Manager, Initializing... SDK manager will show up shortly, but nothing happens) or by clicking SDKmanager.exe directly inside the root folder(a command window flashes one second and disappers)

    Can u help me with this issue..?

    Thanks in Advance!

    Regards
    Mohan M
    mmohanmsc@live.com




    ReplyDelete
  6. Hi Peter , its me again.,

    Still a newbie to this Andro-World, now my requirement is now i wanna create an application as that of yours, but i need more is i wanna Select,Insert,Update & Delete from the SQL-Lite database (With 4 buttons & also 4textboxes to update data). Also i need to know whether any designed templates available for table layout's so that we can make use of them in our coding?

    Give me some idea to start-up with this & also about the design in table layouts..!

    Thanks in Advance.!
    Regards
    Mohan M
    mmohanmsc@live.com

    ReplyDelete
  7. Please Tell me How to Custom Listview in this project same db but in mainactivity i want to just show records in custom list view and with edit ,delete and new record insert facility please ge me sample like this i am very thankful to you .Thanks Alot once again.please mail me at muhammamwaqas2@yahoo.com

    ReplyDelete
    Replies
    1. There are many such type database tutorials are available in websites. The following is a tutorial which I think will fit for your need. Source code is also available for this.Only slight modification will be needed. There are so many other tutorials also of the same type just search "android database tutorial" in Google.
      http://javapapers.com/android/android-sqlite-database

      Delete
  8. Hi,
    mystring = res.getStringArray(R.array.Sex);//getting the array items to string named my string
    //mystring is an array which is defined on the top

    getting array can't be resolved and can't find it defined anywhere.

    Thanks for the work

    ReplyDelete
  9. The R.java file gets completely corrupted when I clean it so something is missing, probably in the resources.
    It only gets corrupted after I add the string file and I clean it otherwise it's the array problem above to begin with.

    ReplyDelete
  10. Ok fixed it, had to take the main.xml file out of the menu folder and put your activity_main also in there in that was in your download folder, normally I have that in the layout folder.

    ReplyDelete
  11. Works like a charm!

    ReplyDelete
  12. It's been a great work from the writer to write this post. it is very helpful for me as I am also engaged with Android applications. This tutorial of database and spinner is truly nice. It is very helpful to the android application developers to deliver best service and support.

    ReplyDelete
  13. Thanks for your great work.

    However, there are some minor mistakes on your post here. I didn't download your source codes from the link but I did it by copying what you put on your page here. The mistakes are as follow:
    1) Missing parentheses at the end of the code: CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US'
    2) Missing code in the strings.xml: <string name="action_settings">Settings</string>
    3) Misspell database name in the DatabaseHelper.java: private static String DB_NAME = "Sample_Databae";

    After correcting those minor mistakes, the application runs fine.

    Thanks again.

    ReplyDelete
  14. Thanks for the good tutorial.
    Able to compile especially after Safuan Abdul Latif fixed.
    However, i encounter runtime errors, database has stopped.
    Kindly seek your advice.

    ReplyDelete
    Replies
    1. Hi Glen,
      I think there are some errors in the code I have pasted. Just see the comments. Please download the source code given at the end. I think it should work.
      Thank You

      Delete
  15. This comment has been removed by the author.

    ReplyDelete
  16. Hi... project works fluent. The Downloaded workspace works just perfectly !! Yup there are some errors in the code over here, but the downloaded Workspace is just great !!

    ReplyDelete
  17. Also how to insert a record by taking input from user from edittext and add the record to the Database

    ReplyDelete
  18. after trying so many days, i finally can run on my bluestack now, but when i select male or female it doesnt show data, buton doesnt work or database didnt link?? any1 have this problem, how to solve this

    ReplyDelete
    Replies
    1. Just downlo0ad the source code it should work!
      http://rapidshare.com/files/2602646334/Database.zip

      Delete
    2. ty for quick response, i download as u said when i import it there are 4 erors in mainactivity.java

      The project was not built since its build path is incomplete. Cannot find the class file for java.lang.

      The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files

      Unable to resolve target 'android-17'

      Delete
    3. Are you using eclipse with latest version of Android tools? whih version of Android you are using as target when creating a new Application?

      Delete
    4. i think it's my adt, its old 22,3.0, i will update and post result, i hope i can do it now :)

      Delete
  19. Android cannot execute the database directly from the asset folder so it first load it in to the system folder and run it from there. Your database will be stored in the following location "/data/data/com.example.database/databases/" with the name "Sample_databse" <--- i'm confuse here too, should i make folder in database->data>data>com.example.database>databases and paste sample_database?

    ReplyDelete
    Replies
    1. No the Application will load it in to this location when running. You dont have to do anything

      Delete
  20. Everything is working fine now, thank you so much Mr. Arise,
    how to add scroll on result if it is more than one page, and i want to hide sex on result, can u help me again :P

    ReplyDelete
  21. What if you want to use three spinners to query database. How shall you implement the following scenario?

    ReplyDelete
  22. This comment has been removed by the author.

    ReplyDelete
  23. This comment has been removed by the author.

    ReplyDelete
  24. I run the project in emulator.
    it shows the screen with the Spinner control & allows me to choose values.
    after choosing a value ,

    Unfortunately Database has stopped and application closes.

    Please help to move further with this error.
    Thanks in Advance.

    ReplyDelete
  25. I simply want to say I’m very new to blogs and actually loved you’re blog site. Almost certainly I’m going to bookmark your blog post . You absolutely come with great well written articles. Thanks a lot for sharing your blog.
    Best Android Training in Velachery | android development course fees in chennai

    ReplyDelete
  26. This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.
    android development course fees in chennai | android app development training in chennai|Android Training institute in chennai with placement | Best Android Training in velachery

    ReplyDelete
  27. It's extraordinarily impressive I'll be seen that many of the bloggers relevant android community that the time I read that's your suggestions helped me and define the new thing. pretty understandable helpful content.
    Selenium Training in Chennai | Best Selenium Training Institute in Chennai | Android Training in Chennai | Best Android Training with placement in chennai

    ReplyDelete
  28. Hi, thanks for this very nice and interesting post. I like your writing style, it’s quite unique. Please visit https://goo.gl/UVynXX

    ReplyDelete
  29. Thank you for helping us through this post. The post is very interesting and helpful to a beginner.

    ReplyDelete
  30. Very informative article to work with data on Android. Keep posting.

    ReplyDelete
  31. This concept is a good way to enhance the knowledge.thanks for sharing. please keep it up selenium Online Training Bangalore

    ReplyDelete
  32. I am really happy with your blog because your article is very unique and powerful for new reader.
    Click here:
    Selenium Training in Chennai | Selenium Training in Bangalore | Selenium Training in Pune

    ReplyDelete
  33. I am happy to find this post very useful for me, as it contains a lot of information. I always prefer to read the quality content I found in you post. Thanks for sharing.
    Loadrunner Training in Chennai
    Big Data Training in Chennai
    java classes in chennai
    java j2ee training
    core java training in chennai

    ReplyDelete
  34. Good job in presenting the correct content with the clear explanation. The content looks real with valid information. Good Work

    DevOps is currently a popular model currently organizations all over the world moving towards to it. Your post gave a clear idea about knowing the DevOps model and its importance.

    Good to learn about DevOps at this time.


    devops training in chennai | devops training in chennai with placement | devops training in chennai omr | devops training in velachery | devops training in chennai tambaram | devops institutes in chennai | devops certification in chennai | trending technologies list 2018

    ReplyDelete
  35. hello,
    i just want to say that you have clearly mention the process very clearly and i also found it is very much easy
    to understand. keep sharing.

    ios app development company in chennai

    ReplyDelete
  36. I accept there are numerous more pleasurable open doors ahead for people that took a gander at your site.we are providing ReactJs training in Chennai.
    For more details: ReactJs training in Velachery | ReactJs training in chennai

    ReplyDelete
  37. wonderful blog. This spinner tutorial is really good for us and i would like to share such cute tricks with my friends.

    ReplyDelete
  38. Very good article with very useful information. Visit our website
    earn money online from google without investment

    ReplyDelete
  39. This comment has been removed by the author.

    ReplyDelete
  40. Just seen your Article, it amazed me and surpised me with god thoughts that eveyone will benefit from it. It is really a very informative post for all those budding entreprenuers planning to take advantage of post for business expansions. You always share such a wonderful articlewhich helps us to gain knowledge .Thanks for sharing such a wonderful article, It will be deinitely helpful and fruitful article.
    Thanks
    DedicatedHosting4u.com

    ReplyDelete
  41. Good Post! Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging.
    Hadoop Training in Electronic City

    ReplyDelete
  42. Thanks for the Valuable information.Really useful information. Thank you so much for sharing.It will help everyone.Keep Post. Find Some Indian Memes. Interesting NewsTamilrockers Movie Download Trending News Some Life hacks tips Life hacks Entertainment News Find Some Viral News Here.Viral News

    ReplyDelete
  43. Poweramp is a powerful music player for Android. Using Poweramp Full Version Unlocker [Cracker] For Android, you can access the extra features of the Poweramp music player. https://www.hightechpicker.com/2019/08/poweramp-full-version-unlocker.html

    ReplyDelete
  44. amazing post and written in very simple and impressive language. Thanks for sharing
    harry potter wifi names

    ReplyDelete
  45. Nice Post. You have done a great job. Please Keep Posting and Keep Sharing. Emotional Quotes

    ReplyDelete
  46. increse download speed, download speedn increase ,how idm work,
    how to use idm,use how idm,internet speed,
    make downloads faster, internet speed up tips,
    speed up internet,how to use idm,increase Speed of internet,
    https://www.youtube.com/watch?v=zag2z2QVw30
    How To Incress Downloading Speed ? What Is IDM How Its Work ?

    ReplyDelete
  47. Your articles really impressed for me,because of all information so nice.servicenow training in bangalore

    ReplyDelete
  48. These provided information was really so nice,thanks for giving that post and the more skills to develop after refer that post.opennebula training in bangalore

    ReplyDelete
  49. I gathered a lot of information through this article.Every example is easy to undestandable and explaining the logic easily.openstack training in bangalore

    ReplyDelete
  50. Very useful and information content has been shared out here, Thanks for sharing it.salesforce developer training in bangalore

    ReplyDelete
  51. This is really an awesome post, thanks for it. Keep adding more information to this.vmware training in bangalore

    ReplyDelete
  52. thank you so much for this nice information Article, Digitahanks for sharing your post with us.Real Time Experts training center bangalore

    ReplyDelete
  53. Post is very useful. Thank you, this useful information.

    Get Best Service Now Training in Bangalore from Real Time Industry Experts with 100% Placement Assistance in MNC Companies. Book your Free Demo with Softgen Infotech.

    ReplyDelete
  54. Today I’m going to show you how to write articles and earn money in IndiaThese methods are best and can replace your job. In fact, one of my colleagues is making more than Rs. 25,963. And he gets paid to write articles at home from India.

    ReplyDelete
  55. Ritesh Agarwal is the CEO, founder of OYO Rooms. Yes, OYO Rooms known as OYO Homes and Hotels which is an Indian Chain, world’s third-largest and top two from China. Ritesh Agarwal is today’s world’s fastest hotel growing chain’s CEO. Ritesh has achieved the Thiel Fellowship which helped him to reach great heights. He was just 18 when he started his company OravelStays which later turned into OYO Rooms. Ritesh Agarwal wiki is quite fascinating so let’s get to it.

    ReplyDelete
  56. Very nicely done. Your show schedule gave me the info on some shows I was wondering about. I visited your web site today and found it very interesting and well done. I can tell you have put a lot of work into it. Thank you for the listing on your web page. You have a good looking web site Your site is exactly what I have looking for!! Keep up with the good work.

    How to Change PS4 DNS Settings
    Fastest DNS for PS4 [2020]
    PS4 NAT Type Failed – Fixed [100% Working 2020]

    ReplyDelete
  57. Thanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website
    top servicenow online training

    ReplyDelete
  58. Really i found this article more informative, thanks for sharing this article! Also Check here

    Download and install Vidmate App which is the best HD video downloader software available for Android. Get free latest HD movies, songs, and your favorite TV shows

    Vidmate App Download

    Vidmate apk for Android devices

    Vidmate App

    download Vidmate for Windows PC

    download Vidmate for Windows PC Free

    Vidmate Download for Windows 10

    Download Vidmate for iOS

    Download Vidmate for Blackberry

    Vidmate For IOS and Blackberry OS

    ReplyDelete
  59. Thank you for sharing valuable information. Thanks for providing a great informatic blog, really nice required information & the things I never imagined. Thanks you once again Hungry Shark Evolution Mod Apk

    ReplyDelete
  60. Download Latest Android Mod Apk from Modkiller. This is the Best Modded APK site of 2019, We share Modded Games and other android apps for Free.

    Mod Killer
    Jntuk Fast Updates
    fast vpn mod apk
    tinder gold mod apk
    unblock website vpn mod apk
    vpn lighter mod apk
    avg cleaner pro mod apk
    videoshop pro mod apk

    ReplyDelete
  61. Download Latest Android Mod Apk from Modkiller. This is the Best Modded APK site of 2019, We share Modded Games and other android apps for Free.

    vpn master premium mod apk
    pocket caste mod apk
    hola vpn mod apk
    procam x mod apk
    filmmaker pro mod apk
    azar mod apk
    link vpn mod apk
    imvu mod apk

    ReplyDelete
  62. Download Latest Android Mod Apk from Modkiller. This is the Best Modded APK site of 2019, We share Modded Games and other android apps for Free.

    surfeasy vpn mod apk
    vpn by firevpn mod apk
    music speed changer mod apk
    adove acrobat reader pro mod apk
    tunnelbear vpn mod apk
    pub gfx mod apk
    hi vpn pro mod apk

    ReplyDelete
  63. Download Latest Android Mod Apk from Modkiller. This is the Best Modded APK site of 2019, We share Modded Games and other android apps for Free.

    vpn 360 mod apk
    Dog vpn mod apk
    piclab mod apk
    avira antivirus security premium mod apk
    x vpn mod apk
    koda cam mod apk

    ReplyDelete
  64. Awesome post. We all are praying for the world. The first world country is now at the top risk. Then the horrible thing is how can the third and the second world will protect themselves from this fatality? Still, now we have some time, please try to be safe.
    DEADLY EFFECT OF CORONAVIRUS (COVID-19) ALL OVER THE WORLD
    Thanks.

    ReplyDelete
  65. Your Website is very good, Your Website impressed us a lot, We have liked your website very much.
    We have also created a website of Android App that you can see it.

    http://damodapk.com/
    http://infotodaypk.com/

    ReplyDelete
  66. This comment has been removed by the author.

    ReplyDelete
  67. The site was so nice, I found out about a lot of great things. I like the way you make your blog posts. Keep up the good work and may you gain success in the long run.


    Big Data Hadoop Training In Chennai | Big Data Hadoop Training In anna nagar | Big Data Hadoop Training In omr | Big Data Hadoop Training In porur | Big Data Hadoop Training In tambaram | Big Data Hadoop Training In velachery

    ReplyDelete
  68. nice tip! thank you so much. this website make you rich.먹튀

    ReplyDelete

  69. Very nice post..After reading your post,thanks for taking the time to discuss this, I feel happy about and I love learning more about this topic.
    Selenium Training in chennai | Selenium Training in anna nagar | Selenium Training in omr | Selenium Training in porur | Selenium Training in tambaram | Selenium Training in velachery

    ReplyDelete
  70. thanks for sharing information awesome blog post click here

    ReplyDelete
  71. Thanks for sharing information awesome blog post Online Education Quiz website Gk in Hindi

    ReplyDelete
  72. Excellent blog thanks for sharing the valuable information..it becomes easy to read and easily understand the information.
    Useful article which was very helpful. also interesting and contains good information.
    to know about python training course , use the below link.

    Python Training in chennai

    Python Course in chennai

    ReplyDelete
  73. Very interesting, good job and thanks for sharing such a good blog. your article is so convincing that I never stop myself to say something about it. You’re doing a great job. Keep it up

    Java Training in Chennai

    Java Course in Chennai

    ReplyDelete
  74. Thanks for Sharing a Very Informative Post & I read Your Article & I must say that is very helpful post for us.
    Online Data Science Classes
    Selenium Training in Pune
    AWS Online Classes
    Python Online Classes

    ReplyDelete
  75. I was taking a gander at some of your posts on this site and I consider this site is truly informational! Keep setting up

    3 BHK Flats for sale in Patancheru, Hyderabad

    ReplyDelete
  76. Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot. it is really explainable very well and i got more information from your blog.
    Plant Engineering Services
    Offshore Engineering Services India

    ReplyDelete
  77. You are the play of the Mobile Legend Games & you want to HACK MLBB game? So, DOWNLOAD injector tools. EZ Star Injector, EZ Hunter, NC Injector, Marjotech PH , NEW I-MOBA, NEW BoxSkin, YS Patcher

    ReplyDelete
  78. Are you getting bored during this lockdown ? We are here for you to kill your boredom and offering amazing courses for you only. There will be CS executive classes which is very easy to understand and a free of cost CSEET classes so guys hurry up . To avail this offer visit our website or contact us at https://uniqueacademyforcommerce.com/

    ReplyDelete
  79. Shop for the latest Redmi mobiles from Helmet Don at the best prices in India. Xiaomi smartphones include Mi Series, Mi Note Series, Redmi Series, Pocophone, Mi Max Series, Mi Mix Series, and the Blackshark.
    HelmetDon
    MI
    redmi-phones


    ReplyDelete
  80. Shop Repair & Buy Mobiles Online At best prices in India only at https://rshop.in/location/shikrapur/

    ReplyDelete
  81. kya aap islamic information zero to hero sikhna chahte hai to www.namazquran.com website ke sath jude jao waha pe apko daily new post islamic knowledge ka milega.

    ReplyDelete
  82. Search Chennai real estate, Chennai property, Chennai Home For Sale, Chennai Land for Sale, property in Chennai, real estate in Chennai. Buy Commercial or Industrial Properties in Chennai.
    chennai
    visit here
    best-villa-projects-in-coimbatore

    ReplyDelete
  83. Nice Article, I Really Like The Way You Set Things Out In An Easy Way To UnderstandFree Forex Signals

    ReplyDelete
  84. Trade FX At Home On Your PC: roboforex login Is A Forex Trading Company. The Company States That You Can Make On Average 80 – 300 Pips Per Trade. roboforex login States That It Is Simple And Easy To Get Started.

    ReplyDelete
  85. Find Out About The Advantages Of Using A Broker Like Technical AnalysisAnd Learn More About The Stock Market And The Best Ways To Invest In It. Read More Here.

    ReplyDelete
  86. With Aximtrade Review You Can Also Use Technical Analysis Tools Such As The Candle Chart, Price-time Charts And More. As Well As Offering 24/5 Trading On Mt4 To All Its Clients, With Xtb You Can Benefit From Additional Features And Enhanced Functionality.

    ReplyDelete
  87. AximTrade Is A Forex And Cfd Broker. It Offers Trading In Currency Pairs, Commodities, Indices, And Shares. It Also Provides A Range Of Tools, And 24/7 Customer Service. Sign Up For Aximtrade Login Account Today!

    ReplyDelete
  88. AximTrade Review Is A Forex And Cfd Broker. It Offers Trading In Currency Pairs, Commodities, Indices, And Shares. It Also Provides A Range Of Tools, And 24/7 Customer Service. Sign Up For AximTrade Login Account Today!

    ReplyDelete
  89. If You Are Looking For A Reliable Fx Broker, Don't Rush And Read This XM REVIEW Review First. This Is A Serious Warning Against The Broker's Illegal Activities.

    ReplyDelete
  90. please take some time and visit to our sites if anybody is searching for jobs .
    Skillbee is the best quest for new employment application.
    skillbee
    all job fujairah

    ReplyDelete
  91. Want To Trade Forex With AVATRADE REVIEW ? Read This Blog First To Find Out About The Best Forex Trading Conditions. We Review The Most Popular Forex Brokers And Tell You What You Need To Know.

    ReplyDelete
  92. Find the list of Top 10 Forex Broker USA Based On Independent Ratings, Reviews, And Online Presence. Find Out Which Broker You Should Choose.

    ReplyDelete
  93. I used to ask to get this information for a long time, I was not getting it, after reading your post, I have got complete information about it.

    ReplyDelete
  94. Acquire the trending DevOps Training in Chennai from the best software training institute in Chennai, Infycle Technologies. Additionally, we come up with the latest demanded technological courses like Python, Data Science, Digital Marketing, Big Data, Oracle, AWS, Azure, Google Cloud, Java, and Oracle with the best faculties in the industry. To clear your doubts, call +91-7504633633 or +91-7502633633.

    ReplyDelete
  95. I want the world to know about where to invest their hard earned money and get fruitful returns. If one is looking forward of investing he can go into investment of crypto coins.
    You can invest in Fudxcoin company that deals in the selling and purchasing of Crypto Currency. It is a reliable company. One need not doubt in investing in it as i have also bought crypto currency from it and feeling very satisfied with their services.
    crypto currency block chain technology

    ReplyDelete
  96. AFM Logistics Pvt Ltd is Best Ocean Freight Forwarding Companies In India established in Delhi. The company was constituted in 2012 and is indulged in providing complete logistics solution. The company has its own setup and wide network of agents throughout the world. Best Custom Clearing Company in Delhi . They are the Top Freight Forwarding Companies In India. AFM Logistics Pvt Ltd has been working as Best Air Cargo Company in Delhi since 2012. They have been providing Worldwide Shipping and Logistics Company in Delhi for a very long time.

    ReplyDelete
  97. I found for that excuse many enticing stuff in your blog especially its ventilation. From the heaps of remarks a propos your articles, I surmise I'm as of now not the independent one having all of the relaxation here! shop occurring the charming complete.. Office 2019 Crack

    ReplyDelete
  98. i'm honest natured you take conveyance of to self-centeredness in your message. It makes you stand dependancy out from numerous assistant essayists that can't uphold extreme climate content remembering you. How To Crack Microsoft Office 2019

    ReplyDelete

Please give your valuable comments so as to know whether this blog is useful to you.You can also write helpful Android Development Syntax or Shortcuts or Tips.