Click here to Skip to main content
15,878,809 members
Articles / Mobile Apps / Android

Number System Converter Android App

Rate me:
Please Sign up or sign in to vote.
4.86/5 (10 votes)
18 Oct 2012CPOL4 min read 76.3K   2.9K   21   18
This article demonstrates creating an Android application to perform number system conversion.

Sample Image

Sample Image

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:

Java
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.

XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</LinearLayout>

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:

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

then it can be used in the activity class by writing the following code:

Java
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:

Java
button1.setOnClickListener(this);

The following code sets the listener for an EditText to respond to the text changed event:

Java
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.

Java
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:

XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:text="Enter Decimal Number: " android:id="@+id/textView1" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <EditText android:text="" android:id="@+id/txtDecimal" android:layout_width="match_parent" 
      android:layout_height="wrap_content"></EditText>
    <TextView android:text="Binary: " android:id="@+id/textView2" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <TextView android:text="" android:id="@+id/txtBinary" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <TextView android:text="Octal: " android:id="@+id/textView4" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <TextView android:text="" android:id="@+id/txtOctal" android:layout_width="wrap_content" 
      android:layout_height="wrap_content"></TextView>
    <TextView android:text="Hexadecimal: " android:id="@+id/textView6" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <TextView android:text="" android:id="@+id/txtHexadecimal" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <Button android:text="About" android:id="@+id/button1" 
      android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

Following is the code of the main activity:

Java
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. */
    @Override
    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<Object> stack=new Stack<Object>();
            int number=Integer.parseInt(txtDecimal.getText().toString());
            while (number>0)
            {
                int remainder=number%base; // find remainder
                if(remainder<10)
                // for remainder smaller than 10
                {
                    stack.push(remainder);
                    // push remainder in stack
                }
                else
                {
                    switch (remainder)
                    // for remainder larger than 9 (for hexadecimal values)
                    {
                    case 10:
                        stack.push("A");
                        break;
                    case 11:
                        stack.push("B");
                        break;
                    case 12:
                        stack.push("C");
                        break;
                    case 13:
                        stack.push("D");
                        break;
                    case 14:
                        stack.push("E");
                        break;
                    case 15:
                        stack.push("F");
                        break;
                }
            }
            number/=base;
        }
        StringBuffer buffer=new StringBuffer();
        while (!stack.isEmpty())
        {
                buffer.append(stack.pop().toString());
        }
        txtView.setText(buffer.toString());
    }
       catch (Exception e)
    {
        txtView.setText(e.getMessage());
    }
}

public void onClick(View view)
// to display Information in a dialog box
{
   // create a dialog box
   Builder builder=new Builder(this);
   // to allow cancelling the dialog box
   builder.setCancelable(true);
   // set title
   builder.setTitle("About NumberSystemConverter");
   // set message
   builder.setMessage("Made by Azim");
   // display dialog box
   builder.show();
}

The above code uses the onTextChanged() method to get the decimal number entered by the user and call the user-defined method called calculate() to convert the decimal number to binary, octal and hexadecimal formats. The onTextChanged() method gets executed whenever the text is changed in an EditText control. The calculate() method takes two parameters. The first parameter denotes the base of the target number system and the second parameter denotes the target TextView control on which to display the result.

After executing the program, the following screen appears:

Image 3

Clicking the About button displays the following screen:

Image 4

Points of Interest

Executing the program generates the NumberSystemConverter.apk file in the bin folder. This file can be copied to an android device in order to execute the app on the device. The following image shows the app being executed on my HTC Explorer android mobile:

Image 5

I hope my article will be helpful to developers new to the android platform.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Instructor / Trainer NIIT, India
India India
I am a trainer by profession. Currently I am working with iFuture Technologies(India) as a Senior Faculty. I enjoy programming as a hobby. During my career I have seen the growth and decline of many technologies, many of them being my favorites like Flash, WPF, Windows Mobile Development. Few of my current favorites are Android, Xamarin and Python, though I also like traditional and evergreen languages like PHP, C#, Visual Basic and Java.

Apart from computers, my favorite pastime is bicycling.

Comments and Discussions

 
GeneralGood one! Pin
Member 1109084117-Sep-14 20:01
Member 1109084117-Sep-14 20:01 
GeneralRe: Good one! Pin
Azim Zahir19-Sep-14 19:15
Azim Zahir19-Sep-14 19:15 
Questionhelp needed Pin
Anurag Sinha V24-Aug-14 5:53
Anurag Sinha V24-Aug-14 5:53 
Questionhelp me out.. Pin
Member 103869839-Nov-13 5:31
Member 103869839-Nov-13 5:31 
AnswerRe: help me out.. Pin
Azim Zahir17-Nov-13 18:13
Azim Zahir17-Nov-13 18:13 
Questionasking about logarithm Pin
Member 1033411514-Oct-13 21:24
Member 1033411514-Oct-13 21:24 
AnswerRe: asking about logarithm Pin
Azim Zahir16-Oct-13 15:59
Azim Zahir16-Oct-13 15:59 
Questionres>layout values Pin
danskieness4-Mar-13 1:59
danskieness4-Mar-13 1:59 
AnswerRe: res>layout values Pin
Azim Zahir11-Mar-13 19:22
Azim Zahir11-Mar-13 19:22 
Questionone problem encountered... Pin
Anurag Sinha V1-Nov-12 20:07
Anurag Sinha V1-Nov-12 20:07 
AnswerRe: one problem encountered... Pin
Azim Zahir2-Nov-12 16:33
Azim Zahir2-Nov-12 16:33 
GeneralRe: one problem encountered... Pin
Anurag Sinha V3-Nov-12 6:24
Anurag Sinha V3-Nov-12 6:24 
GeneralRe: one problem encountered... Pin
Anurag Sinha V5-Nov-12 7:00
Anurag Sinha V5-Nov-12 7:00 
GeneralRe: one problem encountered... Pin
Azim Zahir5-Nov-12 17:37
Azim Zahir5-Nov-12 17:37 
Questionnice crisp article!! Pin
Anurag Sinha V31-Oct-12 21:09
Anurag Sinha V31-Oct-12 21:09 
AnswerRe: nice crisp article!! Pin
Azim Zahir2-Nov-12 16:50
Azim Zahir2-Nov-12 16:50 
GeneralMy vote of 5 Pin
hari1911319-Oct-12 2:19
hari1911319-Oct-12 2:19 
GeneralRe: My vote of 5 Pin
Azim Zahir19-Oct-12 3:56
Azim Zahir19-Oct-12 3:56 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.