Wednesday, December 14, 2011

Using your own SQLite database in Android applications



Most all of the Android examples and tutorials out there assume you want to create and populate your database at runtime and not to use and access an independent, preloaded database with your Android application.
The method I'm going to show you takes your own SQLite database file from the "assets" folder and copies into the system database path of your application so the SQLiteDatabase API can open and access it normally.
1. Preparing the SQLite database file.
Assuming you already have your sqlite database created, we need to do some modifications to it.
If you don't have a sqlite manager I recommend you to download the opensource SQLite Database Browser available for Win/Linux/Mac.
Open your database and add a new table called "android_metadata", you can execute the following SQL statement to do it:
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US')
Now insert a single row with the text 'en_US' in the "android_metadata" table:
INSERT INTO "android_metadata" VALUES ('en_US')
Then, it is necessary to rename the primary id field of your tables to "_id" so Android will know where to bind the id field of your tables.
You can easily do this with SQLite Database Browser by pressing the edit table button Edit Table, then selecting the table you want to edit and finally selecting the field you want to rename.
After renaming the id field of all your data tables to "_id" and adding the "android_metadata" table, your database it's ready to be used in your Android application.
Modified database
Modified database
Note: in this image we see the tables "Categories" and "Content" with the id field renamed to "_id" and the just added table "android_metadata".
2. Copying, opening and accessing your database in your Android application.
Now just put your database file in the "assets" folder of your project and create a Database Helper class by extending the SQLiteOpenHelper class from the "android.database.sqlite" package.
Make your DataBaseHelper class look like this:
public class DataBaseHelper extends SQLiteOpenHelper{
 
    //The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
 
    private static String DB_NAME = "myDBName";
 
    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
     }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();
 
         try {
 
       copyDataBase();
 
      } catch (IOException e) {
 
          throw new Error("Error copying database");
 
         }
     }
 
    }
 
    /**
     * 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;
 
     try{
      String myPath = DB_PATH + DB_NAME;
      checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
 
     }catch(SQLiteException e){
 
      //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.
 
}
That's it.
Now you can create a new instance of this DataBaseHelper class and call the createDataBase() and openDataBase() methods. Remember to change the "YOUR_PACKAGE" to your application package namespace (i.e: com.examplename.myapp) in the DB_PATH string.
       ...
 
        DataBaseHelper myDbHelper = new DataBaseHelper();
        myDbHelper = new DataBaseHelper(this);
 
        try {
 
         myDbHelper.createDataBase();
 
  } catch (IOException ioe) {
 
   throw new Error("Unable to create database");
 
  }
 
  try {
 
   myDbHelper.openDataBase();
 
  }catch(SQLException sqle){
 
   throw sqle;
 
  }
 
        ...

Thursday, December 8, 2011

Android 4.0 Development Tutorial

Android 4.0 Development Tutorial

Development with Android Gingerbread and Eclipse

This tutorial describes how to create Android applications with Eclipse. It is based on Eclipse 3.7 (Indigo), Java 1.6 and Android 4.0 (Ice Cream Sandwich).

Table of Contents
1. What is Android?
1.1. Android Operation System
1.2. Important Android components
1.3. Dalvik Virtual Machine
1.4. Security and permissions
2. Android Application Architecture
2.1. AndroidManifest.xml
2.2. R.java, Resources and Assets
2.3. Reference to resources in XML files
2.4. Activities and Layouts
2.5. Activities and Lifecycle
2.6. Context
3. Installation
3.1. Eclipse and automatic Android SDK
3.2. Manually install Android SDK
3.3. Install a specific Android version
3.4. Android Source Code
4. Using the Emulator
4.1. Create an Android Emulator Device
4.2. Emulator Shortcuts
4.3. Performance
5. Error handling and typical problems
5.1. Clean Project
5.2. LogCat
5.3. Emulator does not start
5.4. Error message for @override
5.5. Missing Imports
5.6. Eclipse Tips
6. Your first Android project
6.1. Create Project
6.2. Two faces of things
6.3. Create attributes
6.4. Add UI Elements
6.5. Edit UI properties
6.6. Code your application
6.7. Start Project
7. Starting an deployed application
8. Menus and Action Bar
8.1. Definition of menu entries
8.2. Action bar tabs
8.3. Context menus
9. Tutorial: Menus and Action Bar
9.1. Project
9.2. Add a menu XML resource
10. Preferences
11. Tutorial: Preferences
11.1. Using preferences
11.2. Run
12. Dialogs via the AlertDialog
13. Layouts
14. TableLayout
14.1. Overview
14.2. Example
15. ContentProvider
15.1. Overview
15.2. Create contacts on your emulator
15.3. Using the Contact Content Provider
16. ScrollView
17. Fragments
17.1. Overview
17.2. When to use Fragments
18. Fragments Tutorial
18.1. Project and Overview
18.2. Create layouts
18.3. Create Fragment classes
18.4. Activities
18.5. Run
19. DDMS perspective and important views
19.1. DDMS - Dalvik Debug Monitor Server
19.2. LogCat View
19.3. File explorer
20. Shell
20.1. Android Debugging Bridge - Shell
20.2. Uninstall an application via adb
20.3. Emulator Console via telnet
21. Deploy your application on a real device
22. Thank you
23. Questions and Discussion
24. Links and Literature
24.1. Source Code
24.2. Android Resources
24.3. vogella Resources

Thursday, December 1, 2011

Android Live Design Preview Tool


Introducing Android Design Preview, a little utility for Mac/Windows/Linux that'll mirror a portion of your desktop screen (such as your Photoshop canvas) to your USB-connected Android device.


To see how it works, check out my screencast introducing the tool below.



As always, all the code is open sourced at http://code.google.com/p/android-ui-utils, and you can get a Mac Disk Image or an executable JAR for your Mac, Windows, or Linux machine here:






Note that Android Design Preview is still a fairly beta tool, so if you encounter bugs, please file them at the android-ui-utils open source project linked above.



Thanks!



Monday, November 28, 2011

Best Android Tablet PC s


Asus Eee Pad TransformerAsus Eee Pad Transformer – Android Tablet with docking station
Asus Eee Transformer Pad is an android tablet pc that comes with a docking station that adds a number of additional product features. Due to the docking station that comes with an extra battery, operating time of the tablet reaches up to 16 hours. The docking Station comes with two USB 2.0 slots and an SD card reader. Full-size keyboard, similar to the keys found in netbooks Asus 10 inch. However, unlike the netbok’s keyboards, it looks slightly different because there are some buttons that have been configured for Android. Due to the docking station this android tablet pc becomes a true netbook. 
Specs:
Display:10.1″ LED Backlight WXGA (1280×800) Screen
Storage: 16GB/32GB
CPU: NVIDIA® Tegra™ 2
OS: Android 3.0 Honeycomb
Slots: 1 x 2-in-1 Audio Jack (Headphone/Mic-in), 1 x mini HDMI 1.3a, 1 x Card Reader (Micro SD).
Toshiba Folio
This android tablet pc impress through the operating speed, thanks to the optimized operating system for processor capabilities. Toshiba Folio features an application that allows users to connect to most popular social networks.

Also, this android tablet comes with several preinstalled applications, among which we mention: Opera Mobile, Toshiba Media Player, FBReader, Fring, Document to Go, Evernote.
Specs:
Display: multitouch display 10.1 “widescreen WSVGA (1024x600pixel)
Storage: 16GB internal memory
CPU: Nvidia Tegra 2
OS: Android 2.2
Slots: HDMI, USB 2.0 standard, USB 2.0 mini audio jack

ViewSonic ViewPad 10
If you are looking for flexibility, the best choice would be ViewPad ViewSonic 10. This android tablet pc has a dual-boot configuration, which allows the tablet to run Google’s Android 1.6 operating system, or Microsoft Windows 7, depending on user preferences. 
Specs:
Dsiplay:10.1″ LCD Capacitive multi-touch screen with LED backlight, 1024×600
Storage: 16Gb, can be extended to 32 GB via a microSD card
Procesor: dual core NVIDIA Tegra 250 SPM
OS: Android 1.6 / Windows 7 Home Premium

Samsung Galaxy TabSamsung Galaxy Tab
Multitasking in the Galaxy Tab is the biggest advantage that the Samsung tablet has in front of an iPad. Display that provides excellent image quality, compact design, touch-friendly software, the two cameras, the ability to run multiple applications at the same time, make this android tablet pc an excellent purchase. 
Specs:
Display: 7 inch Super TFT LCD, 1024×600 resolution
Storage: 16GB internal, up to 32GB micro SD
Processor: 1.0GHz Cortex A8
OS: Android 2.2

HTC FlyerHTC Flyer
HTC Flyer features premium design and performance, as well as technologies such as:HTC Sense, Scribe HTC HTC HTC OnLive Watch or cloud based gaming service. Battery life is also impressive – 8 to 14 hours in standby mode and HD video playback up to 4 hours. 
Specs:
CPU: 1.5GHz Qualcomm Snapdragon processor
OS: Android™ 2.3 with HTC Sense™
Display:7-inch capacitive multi-touch sensitive TFT screen with 1024 X 600 resolution
Storage: 32 GB of internal storage and Micro SD memory card support

Motorola Xoom
Motorola XoomMotorola Xoom Tablet has top specs: Dual-Core processor, the NVIDIA Tegra,
frequency of 1 GHz and 1 GB DDR2 RAM. Motorola Xoom is the first android tablet pc, running Google’s Honeycomb version of Android. Battery performance is impressive, it can run up to 10 hours of video playback.Wide screen will give a more than pleasant experience, and can also watch movies in HD.
Specs:
CPU: Nvidia Tegra 2, 1 GHZ dual core
Display: 10.1-inch, 1280×800, 150 dpi
OS: Android 3.0 (Honeycomb)
Storage: up to 32 GB
Slots/ ports: microUSB, miniHDMI, microSD, audio, SIM (LTE)