Breaking News


Tuesday 18 February 2014

Global Variable Or Application Context Variable - Android Example

In this example defining variable in application context and you can use this variable as a Global variable. You can set value in this variable and get value on any activity / broadcast recieiver / service in application context(environment).

In Further examples you will see good use of this way to follow SINGALTON pattern and MVC pattern in android.
The problem is how to save value across several Activities and all parts of your application context. You can achieve this by creating static variable but it is not the good way it influencing towards memory leaks. The way in Android is to associate your variable with the Application context.

Every Application has a context, and Android guarantees that Application context will exist as a instance across your application.

The way to do this is to create a class and extends with android.app.Application, and specify your class in the application tag in your AndroidManifest.xml file. Android will create an instance of that class and make it available for your entire application context. You can get object of your class on any activity / broadcast reciever / service in application context(environment) by Context.getApplicationContext() method.

Example WorkFlow :

Global_variable_workflow

Project Structure :


Global_application_context_project_sketch


File : src/GlobalClass.java


Create your custom class subclass of android.app.Application class. you will use this class as global class for your Application environment(Conext).

package com.androidexample.globalvariable;
import android.app.Application;
public class GlobalClass extends Application{
     
    private String name;
    private String email;
     
    public String getName() {
         
        return name;
    }
     
    public void setName(String aName) {
        
       name = aName;
         
    }
    
    public String getEmail() {
         
        return email;
    }
     
    public void setEmail(String aEmail) {
        
      email = aEmail;
    }
}

File : AndroidManifest.xml


Assign GlobalClass.java in application tag, see this line in application tagandroid:name="com.androidexample.globalvariable.GlobalClass" 
After assign you can get GlobalClass.java instance on any activity / broadcast reciever / service in application context.

<?xml version="1.0" encoding="utf-8"?>
    package="com.androidexample.globalvariable"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="9" />
    <application
        android:name="com.androidexample.globalvariable.GlobalClass"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.androidexample.globalvariable.FirstScreen"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
             
        </activity>
         
        <activity android:name=".SecondScreen" ></activity
        <activity android:name=".ThirdScreen" ></activity>
    </application>
</manifest>

File : src/FirstScreen.java


getApplicationContext() method of Context will give GlobalClass.java instance and set name/email values and maintain state of GlobalClass.java instance.

package com.androidexample.globalvariable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
public class FirstScreen extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.firstscreen);
         
        final Button secondBtn = (Button) findViewById(R.id.second);
         
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
         
        //Set name and email in global/application context
        globalVariable.setName("Android Example context variable");
        globalVariable.setEmail("xxxxxx@aaaa.com");
         
         
        secondBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 
                Intent i = new Intent(getBaseContext(), SecondScreen.class);
                startActivity(i);
            }
        });
    }  
}

File : src/SecondScreen.java


Call getApplicationContext() method of Context and get GlobalClass.java instance , By GlobalClass.java instance you can get set values for name/email variables.

package com.androidexample.globalvariable;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class SecondScreen extends Activity {
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondscreen);
     
        TextView showGlobal     = (TextView) findViewById(R.id.showGlobal);
        final Button thirdBtn = (Button) findViewById(R.id.third);
         
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
         
        // Get name and email from global/application context
        final String name  = globalVariable.getName();
        final String email = globalVariable.getEmail();
         
        String showString = "
Name : "+name+"
"+
                            "Email : "+email+"
";
         
        // Show name/email values in TextView
        showGlobal.setText(showString);
         
        thirdBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 
                Intent i = new Intent(getBaseContext(), ThirdScreen.class);
                startActivity(i);
            }
        });
         
    }
     
    @Override
    protected void onDestroy() {
         
        super.onDestroy();
         
    }
}

File : src/ThirdScreen.java


Call getApplicationContext() method of Context and get GlobalClass.java instance , By GlobalClass.java instance you can get set values for name/email variables.

package com.androidexample.globalvariable;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ThirdScreen extends Activity {
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thirdscreen);
     
        TextView showGlobal     = (TextView) findViewById(R.id.showGlobal);
         
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
         
        // Get name and email from global/application context
        final String name  = globalVariable.getName();
        final String email = globalVariable.getEmail();
         
        String showString = "
Name : "+name+"
"+
        "Email : "+email+"
";
         
        // Show name/email values in TextView
        showGlobal.setText(showString);
         
    }
}
 Output :
Global VariableGlobal Variable

Global Variable

Download full code Fireandroids


Share This
Blogger
Facebook
Disqus

comments powered by Disqus

No comments :

Post a Comment

Subscribe
Labels
Popular Posts

Subscribe Via Email

About Us

THIS IS ANDROID AND JAVA FREE TUTORIAL AND ALL PROVIDE SOLUTION IN ANDROID AND JAVA INTERVIEW QUE AND ANS IS AVAILABLE IN MY BLOG AND ANY QUERY PLEASE CONTACT ME GO NOW CONTACT US PAGE.

Total Pageviews

© Android and Java solution All rights reserved | Designed By Fireandroids