25/08/2015
Number System Converter Android App
Introduction
Android is an exciting platform for developing apps that run on a mobile device. Any programmer familiar with Java can learn Android quickly and start developing Android apps. The class library of Android is a subset of Java SE. The two main elements of Android are the Android SDK and an Eclipse plug-in called 'The Android Development Tools (ADT)'. You must ensure the appropriate installation of the SDK and ADT before starting development.
In this article, I am describing how to create an Android app to perform conversion of a decimal number to binary, octal and hexadecimal formats.
Background
There are four building blocks of any android application:
Activities: The basic building block of a user interface in Android is an activity. An activity represents the main screen with which a user can interact with an application.
Content Providers: Content providers provide abstraction for data required by multiple applications.
Intents: Intents are system messages, for e.g., event notifications, for e.g., hardware changes (like SD card insertion), incoming data (like SMS), etc.
Services: Services are independent activities not having an interface for e.g., music playback.
Activities are public classes derived from the android.app.Activity base class. The following code represents an activity in the application:
Hide Copy Code
public class MyActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
}
The onCreate() method gets invoked when the activity is started. The first statement in this method must be to invoke the base classes' onCreate() method to initialize the Android activity.
User interfaces in Android can be created either through Java code or XML files. Using XML files for creating user interfaces is highly preferred because it provides separation of the user interface code from the business logic code.
Following is an example of a LinearLayout definition.
Hide Copy Code
Every android project has an auto-generated R.java file. This file is used to refer to resources in your project. For e.g., if the main.xml layout file defines the following resource:
Hide Copy Code
then it can be used in the activity class by writing the following code:
Hide Copy Code
Button btn=(Button)findViewById(R.id.button1);
Events in android are handled in the same way as in Java SE. For e.g., an activity class can implement the View.onClickListener interface, having the onClick() method to handle the click event of a button. Similarly, the TextWatcher interface can be used to handle the text changed event in an EditText control. The TextWatcher interface has three methods, beforeTextChanged(), afterTextChanged(), and onTextChanged().
User Interface components in Android are represented by Views. The View class is the base class of all components. Some of the views are TextView, EditText, Button, RadioButton and Checkbox. View can respond to events using listeners. Assigning listeners to Views is done in the same way as in Java 2 SE.
For e.g., the following code sets the listener for a Button to respond to the click event:
Hide Copy Code
button1.setOnClickListener(this);
The following code sets the listener for an EditText to respond to the text changed event:
Hide Copy Code
txtDecimal.addTextChangedListener(this);
Dialog boxes are created in android using the Builder class. The Builder class has the following methods:
setTitle(): To set title for the dialog
setMessage(): To set message for the dialog
setCancelable(): To allow/disallow cancelling the dialog
show(): To display the dialog
The following code can be used to create a dialog box and display it.
Hide Copy Code
Builder builder=new Builder(this);
builder.setCancelable(true);
builder.setTitle("Title");
builder.setMessage("Message");
builder.show();
Using the code
In my application, I have created an EditText control having id txtDecimal to accept a number in decimal format and three TextView controls having IDs txtBinary, txtOctal and txtHexadecimal to display the numbers in binary, octal and hexadecimal formats.
Following is the complete code of the main.xml layout file:
Hide Copy Code
Following is the code of the main activity:
Hide Shrink Copy Code
package com.azim;
import java.util.Stack;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.text.Editable;
import android.text.TextWatcher;
public class MyActivity extends Activity implements TextWatcher,View.OnClickListener
{
EditText txtDecimal;
TextView txtBinary,txtOctal,txtHexadecimal;
Button btnAbout;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtDecimal=(EditText)findViewById(R.id.txtDecimal);
txtBinary=(TextView)findViewById(R.id.txtBinary);
txtOctal=(TextView)findViewById(R.id.txtOctal);
txtHexadecimal=(TextView)findViewById(R.id.txtHexadecimal);
txtDecimal.addTextChangedListener(this);
btnAbout=(Button)findViewById(R.id.button1);
btnAbout.setOnClickListener(this);
}
public void beforeTextChanged(CharSequence sequence,int start,int count,int after)
{
}
public void afterTextChanged(Editable editable)
{
}
public void onTextChanged(CharSequence sequence,int start,int before,int count)
{
calculate(2,txtBinary); // for base 2 (binary)
calculate(8,txtOctal); // for base 8 (octal)
calculate(16,txtHexadecimal); // for base 16 (hexadecimal)
}
public void calculate(int base,TextView txtView)
{
if(txtDecimal.getText().toString().trim().length()==0)
{
txtView.setText("");
return;
}
try
{
Stack stack=new Stack();
int number=Integer.parseInt(txtDecimal.getText().toString());
while (number>0)
{
int remainder=number%base; // find remainder
if(remainder