Friday 5 July 2013

Properties File in Android

Properties File in Android


     Properties files are one of the most frequently used mechanism for storing configuration information for applications. And so is the code to access these properties from the application. This article is intended to demonstrate a simple way of configuring and using Properties files in Android applications.

Each parameter is stored as a pair of strings, one storing the name of the parameter (called the key), and the other storing the value.

Here is screen shoot of our simple example app where we are reading values from property file and showing in the Toast.


So we first create our simple property file keys and value pair as 
below example and put it into assests folder of our project 


and here is content of properties file.

MyBlog= khurramitdeveloper@blogspot.com
Profile=http://in.linkedin.com/pub/mohammed-khurram-mohammed-basheer/66/557/3b8
Name= Mohammed Khurram Ahmed
Profession= Software Developer


and we made a class to read this file as below 


package com.itdeveloper.khurram.PropEx;
/**
 * @author Khurram
 *
 */

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;

public class AssetsPropertyReader {
       private Context context;
       private Properties properties;

       public AssetsPropertyReader(Context context) {
              this.context = context;
              /**
               * Constructs a new Properties object.
               */
              properties = new Properties();
       }

       public Properties getProperties(String FileName) {

              try {
                     /**
                      * getAssets() Return an AssetManager instance for your
                      * application's package. AssetManager Provides access to an
                      * application's raw asset files;
                      */
                     AssetManager assetManager = context.getAssets();
                     /**
                      * Open an asset using ACCESS_STREAMING mode. This
                      */
                     InputStream inputStream = assetManager.open(FileName);
                     /**
                      * Loads properties from the specified InputStream,
                      */
                     properties.load(inputStream);

              } catch (IOException e) {
                     // TODO Auto-generated catch block
                     Log.e("AssetsPropertyReader",e.toString());
              }
              return properties;

       }

}



and in our mainActivity Class we read Property from Property File as 


package com.itdeveloper.khurram.PropEx;

import java.util.Properties;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

       private AssetsPropertyReader assetsPropertyReader;
       private Context context;
       private Properties p;

       @Override
       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              context = this;
              assetsPropertyReader = new AssetsPropertyReader(context);
              p = assetsPropertyReader.getProperties("MyStringsFile.properties");


              Toast.makeText(context, p.getProperty("MyBlog"), 1).show();

       }
}



and our xml layout and manifest file content nothing special :P


<RelativeLayout 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" >

</RelativeLayout>



AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itdeveloper.khurram.PropEx"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itdeveloper.khurram.PropEx.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


:) and Now Your favorite thing is Here :P 

You can can download Complete Example :)


Happpy Codddidddddng:)



2 comments:

  1. Can we modify properties value at run time?

    ReplyDelete
    Replies
    1. no, if u want runtime editable key-value use android.content.SharedPreferences;

      Delete