Building Android Currency Converter

This entry was posted on Friday, February 3rd, 2012 and is filed under Uncategorized.

In this tutorial you can learn How to build Currency Converter Application in Android. You can build a real time currency converter using YQL. RealTime Currency converter will give current exchange rates.

Step 1:- main.xml

Here we will make use of two Spinners and Define Layout of our Application.

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/one"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/in"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/equal"
        android:textAppearance="?android:attr/textAppearanceLarge" />




    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="122dp" 
        android:gravity="center"
        android:background="#fff">



        <RelativeLayout
            android:id="@+id/relativeLayout2"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:gravity="center"
            
            android:background="#0D0D0D">
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="@string/result"
            android:textSize="35dp"
            />
        </RelativeLayout>



    </RelativeLayout>

    <Button
        android:id="@+id/button1"
        android:layout_marginTop="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/calculate" />
    <TextView 
        android:id="@+id/tv1"
        android:layout_marginTop="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/powered"/>
</LinearLayout>
</ScrollView>

We make use of ScrollView to enable Scrolling.
Step 2:- Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

        <string name="one">One</string>
        <string name="in">In</string>
        <string name="equal">Is Equal To</string>
        <string name="result">Click Calculate for Result</string>
        <string name="calculate">Calculate</string>
        <string name="powered">Powered By Yahoo! Finance</string>
            
    <string name="app_name">CurrencyConverter</string>
    <string-array name="name">
        <item >Indian Rupee</item>
        <item >US Dollar</item>
        <item >European Union Euro</item>
        <item >Canadian Dollar</item>
        <item >Australian Dollar</item>
        <item >Singapore Dollar</item>
    </string-array>
    <string-array name="value">
        <item >INR</item>
        <item >USD</item>
        <item >EUR</item>
        <item >CAD</item>
        <item >AUD</item>
        <item >SGD</item>
    </string-array>
</resources>

Here we have declared String Resources Required by our application. Here lets write Array and Other Strings Which are used by Main.xml.

Step3 :- Java Code.

package com.currency.org;
/*
 * Created by FirstAmong.com
 * License MIT
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;


import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class CurrencyConverterActivity extends Activity {
	public int to;
	public int from;
	public String [] val;
	public String s;
	public Handler handler;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Spinner s1 = (Spinner) findViewById(R.id.spinner1);
        Spinner s2 = (Spinner) findViewById(R.id.spinner2);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.name, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.select_dialog_singlechoice);
        val  = getResources().getStringArray(R.array.value);
        s1.setAdapter(adapter);
        s2.setAdapter(adapter);
        s1.setOnItemSelectedListener(new spinOne(1));
        s2.setOnItemSelectedListener(new spinOne(2));
        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				TextView t = (TextView) findViewById(R.id.textView4);	
				if(from == to)
				{
					Toast.makeText(getApplicationContext(), "Invalid", 4000).show();
				}
				else
				{										
					  try {
						 s = getJson("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22"+val[from]+val[to]+"%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=");	                    
						JSONObject jObj;
						jObj = new JSONObject(s);
						String exResult = jObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate");
						t.setText(exResult);
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						catch (ClientProtocolException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}													 
					}											
				}	
			
        });
         TextView credit = (TextView) findViewById(R.id.tv1);
         credit.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				Intent i = new Intent(Intent.ACTION_VIEW);
				i.setData(Uri.parse("http://finance.yahoo.com"));
				startActivity(i);
			}
        	 
         });
    }
    public String getJson(String url)throws ClientProtocolException, IOException {
    	
		StringBuilder build = new StringBuilder();
		HttpClient client = new DefaultHttpClient();
		HttpGet httpGet = new HttpGet(url);
	    HttpResponse response = client.execute(httpGet);
		HttpEntity entity = response.getEntity();
		InputStream content = entity.getContent();
		BufferedReader reader = new BufferedReader(new InputStreamReader(content));
		String con;
		while ((con = reader.readLine()) != null) {
					build.append(con);
				}
		return build.toString();
	}
    private class spinOne implements OnItemSelectedListener
    {
    	int ide;
    	spinOne(int i)
    	{
    		ide =i;
    	}
    	public void onItemSelected(AdapterView<?> parent, View view,
    			int index, long id) {
    		if(ide == 1)
    			from = index;
    		else if(ide == 2)
    			to = index;
    			
    	}

    	public void onNothingSelected(AdapterView<?> arg0) {
    		// TODO Auto-generated method stub	
    	}
    	
    }
}


This is straight Forward. Here we parse JSON and Display results. Since we need to attribute Yahoo Finance for Data, I have added a ‘Powered By Yahoo’ link at the bottom of this Application. Thank You!!!

Filed Under: Uncategorized

  • Sonia

    this code shows error 
    java.lang.IllegalArgumentException: Illegal character in query at index 117: http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22Indian RupeeEuropean Union Euro%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=

  • Abdul Aziz Ishak

    hello there, it seems that there is an error from the query.yahooapis.com section. Is the server down?

  • http://www.facebook.com/ipratikgoyal Luckily BeingGeek

    Thumbs up! Can we go for multiple values like 2 or 3 or 4 so on instead of only 1. It would be like currency converter for any value. Also, how can we approach for the same>

  • http://www.facebook.com/kayoko.aihara.39 Kayoko Aihara

    Is there any advantage of using YQL over CSV? I am a bit confused as it seems there are many ways of downloading data from Yahoo… like this guy has done …
    http://www.appsrox.com/android/tutorials/forexwiz/

  • justin lee

    THere is no space to enter the value to convert… and when we click on calculate button… nothing happens…. plz look at this asap…

  • justin lee

    plz reply yarr

  • Ullas Krishnan

    this is for getting only the exchange rate for 2 currencies

  • Ullas Krishnan

    I downloaded this full project and its working fine. But I created the same as a different project but the application unfortunately has stopped. When the both currencies are same its showing invalid, so that part working fine, but it has stopped for different currencies. So the problem is in that part. So please help me out. Thanks in advance.

  • Marco Magdy

    i have the same dilemma here.. is there any solution??

  • Spoorthi

    Thanks a lot! This worked for me and my friends.. We got back our lives :) I rate this with 5++ Stars