Einfacher Dollar - Euro Währungsrechner

  • 18 Antworten
  • Letztes Antwortdatum
Feelix333

Feelix333

Stamm-User
349
Hallo zusammen,

Wie der Titel schon sagt möchte ich für Android eine einfache Währungsrechner - App machen.
Am Anfang mit einem intern festgelegtem Wechselkurs, später noch mit einem Eingabefeld für den aktuellen Kurs.

Leider komme ich im Moment nicht weiter.

Das Grundgerüst habe ich schon erstellt:

MainActivity.java
Code:
package com.example.euro_dollar;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity implements OnClickListener
{
	private Button button;
	
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button)findViewById(R.id.button);
		button.setOnClickListener(this);
	}

	public void onClick(View arg0)
	{
		EditText nameField = (EditText) findViewById(R.id.eingabe);
		String name = nameField.getText().toString();
		if (button.getId() == ((Button)arg0).getId())
		{
			int resourceId;
			if (arg0 == button)
			{
				resourceId = R.string.response;
				String text1 = getResources().getString(resourceId, name);
				TextView ausgabe = (TextView)findViewById(R.id.text1);
				ausgabe.setText(text1);
			}
		}
	}

}

activity_main.xml
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="#008000"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/eingabe"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:text="@string/text3"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    
    <EditText
        android:id="@+id/eingabe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="75dp"
        android:ems="10"
        android:inputType="number" >

        <requestFocus />
    </EditText>
    
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/button" />
    
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:text="@string/text1"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:text="@string/text2"
        android:textStyle="bold"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

strings.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Euro-Dollar</string>
    <string name="action_settings">Einstellungen</string>
    <string name="button">umwandeln</string>
    <string name="text1"><u></u></string>
    <string name="response"><u>%s $</u></string>
    <string name="text2">Aktueller Dollarkurs: 1,3087</string>
    <string name="text3">Betrag in Euro eingeben:</string>

</resources>


Bis jetzt ist es nur eine App, die per Klick auf den Button die eingegebene Zahl wieder ausgibt.

Mein alter Code für eine Umrechnung - was ja nur eine Multiplikation ist - lautet:

Code:
public static void main(String[] args) {
String eingabe;
double ergebnis;
double euro;
eingabe = JOptionPane.showInputDialog("Betragt in Euro:");

euro = Double.parseDouble(eingabe);
ergebnis = euro * 1.22583; //kurs vom 15 Juni 2010
System.out.println("Ergebnis: " + ergebnis + " Dollar");
}

Leider komme ich aber jetzt überhaupt nicht weiter.

Ich habe es so versucht:

Code:
package com.example.euro_dollar;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity implements OnClickListener
{
	private Button button;
	
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button)findViewById(R.id.button);
		button.setOnClickListener(this);
	}

	public void onClick(View arg0)
	{
		EditText nameField = (EditText) findViewById(R.id.eingabe);
		String name = nameField.getText().toString();
		if (button.getId() == ((Button)arg0).getId())
		{
			int resourceId;
			String input = "5";
			double text1;
			double euro;
			
			euro = Double.parseDouble(input);
			text1 = euro * 1.3087;
			if (arg0 == button)
			{
				resourceId = R.string.text1;
				String text1 = getResources().getString(resourceId, name);
				TextView ausgabe = (TextView)findViewById(R.id.text1);
				ausgabe.setText(text1);
			}
		}
	}

}

Bekomme dann aber die Meldung, dass die Variable text1 (duplicate local variable text1) doppelt ist.
Benenne ich sie um bekomme ich in der letzen Zeile den Fehler
"The method setText(CharSequence) in the type TextView ist not applicable for the arguments (double)".


Welchen Typ soll ich sonst nehmen oder habe irgendwo einen kompletten Denkfehler?
Bitte helft mir, das sind eigentlich zwei ganz einfache Programme, aber in bekomme sie einfach nicht unter einen Nenner :-/


Danke schon mal!

mfg
Felix
 
Zuletzt bearbeitet:
Hast noch nicht viel Java Erfahrung, hm? :D

Die Fehlermeldung ist eigentlich klar: Ein TextView kann nur mit Zeichenketten beschickt werden. Du musst aus deiner Fließkommazahl erstmal eine solche machen. Zum Beispiel mit Double.toString() oder so.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Feelix333
Danke dir DieGoldeneMitte!
Ja, warum höre ich das nur immer wieder.. :blushing:

okay, leider kann ich dir aber noch nicht ganz folgen, wo ich die umwandlung mit Double.toString() machen soll.
 
Tausche mal die Zeile

Code:
ausgabe.setText(text1);

mit

Code:
ausgabe.setText(String.valueOf(text1));

Dann sollte es eigentlich funktionieren. Dadurch wird dein double text1 in einen String "umgewandelt".
 
  • Danke
Reaktionen: Feelix333
Danke JustinTime - jetzt werden die "5" korrekt umgewandelt!

Was muss ich jetzt noch ändern, dass der eingegebene Betrag umgewandelt wird?
Irgendwo habe ich jetzt gerade den Denk- und/oder Programmierfehler :winki:
 
Naja du setzt deine Variable Input ja hart auf den Wert 5, stattdessen musst du ihn auf den Wert deines Eingabefeldes setzen.
 
  • Danke
Reaktionen: Feelix333
Ja, das ist mir schon klar, dass ich die festgelegten 5 ändern muss.
Allerdings habe ich Probleme beim Wert des Eingabefeldes.

Der ursprüngliche Beitrag von 14:21 Uhr wurde um 14:59 Uhr ergänzt:

Ah jetzt funktioniert es!
Waren zwei Fehler drin.

Hier der Code, falls es andere auch interessiert.

Code:
package com.example.euro_dollar;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity implements OnClickListener
{
	private Button button;
	
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button)findViewById(R.id.button);
		button.setOnClickListener(this);
	}

	public void onClick(View arg0)
	{
		EditText eingabeFeld = (EditText) findViewById(R.id.eingabe);
		String eingabe = eingabeFeld.getText().toString();
		if (button.getId() == ((Button)arg0).getId())
		{
			
			String bla = eingabe;
			double ergebnis;
			double euro;
			
			euro = Double.parseDouble(bla);
			ergebnis = euro * 1.3087;
			
			if (arg0 == button)
			{
				TextView ausgabe = (TextView)findViewById(R.id.ausgabe);
				ausgabe.setText(String.valueOf(ergebnis + " $"));
			}
		}
	}

}
 
Du musst keinen neuen string bla erstellen. eingabe ist schon einer ;-)

Gesendet von meinem Nexus 4 mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: Feelix333
Die zweite Abfrage
if (arg0 == button)

ist meiner Meinung nach auch überflüssig.

Du prüfst ja weiter oben schon
if (button.getId() == ((Button)arg0).getId())

Die beiden If Abfragen sollten eigentlich immer das gleiche zurück liefern, wenn ich mich nicht irre.
 
Nicht ganz.
Einmal überprüft er die Id. Beim ersten die Object :p
 
Ja schon, trotzdem sollten doch wenn die IDs ggleich sind auch die Objekte gleich sein und andersrum oder nicht? :D
 
  • Danke
Reaktionen: Feelix333
hab auch mal eine Variante für deine MainActivity geschrieben. Vielleicht hilft es dir weiter.
Code:
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    public EditText euroBetrag, dollarKurs, ergebnis;
    public Button berechnung;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        euroBetrag = (EditText)findViewById(R.id.etEuroBetrag);
        dollarKurs = (EditText)findViewById(R.id.etDollarBetrag);
        ergebnis = (EditText)findViewById(R.id.etErgebnis);
        berechnung = (Button)findViewById(R.id.btnBerechnung);

        berechnung.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                double mEuroBetrag = Double.parseDouble(euroBetrag.getText().toString());
                double mDollarBetrag = Double.parseDouble(dollarKurs.getText().toString());
                double mErgebnis = mEuroBetrag * mDollarBetrag;
                ergebnis.setText(String.valueOf(mErgebnis));
            }
        });
    }
}

Und noch eine Erweiterung mit Button der deinen Browser öffnet zum checken des aktuellen Dollarkurses:

Code:
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.content.Intent;
import android.net.Uri;

public class MainActivity extends Activity {

    public EditText euroBetrag, dollarKurs, ergebnis;
    public Button berechnung, holeDollarKurs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        euroBetrag = (EditText)findViewById(R.id.etEuroBetrag);
        dollarKurs = (EditText)findViewById(R.id.etDollarBetrag);
        ergebnis = (EditText)findViewById(R.id.etErgebnis);
        berechnung = (Button)findViewById(R.id.btnBerechnung);
        holeDollarKurs = (Button)findViewById(R.id.btnDollarKurs);

        berechnung.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                double mEuroBetrag = Double.parseDouble(euroBetrag.getText().toString());
                double mDollarBetrag = Double.parseDouble(dollarKurs.getText().toString());
                double mErgebnis = mEuroBetrag * mDollarBetrag;
                ergebnis.setText(String.valueOf(mErgebnis));
            }
        });

        holeDollarKurs.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.finanzen.net/devisen/dollarkurs"));
                startActivity(browserIntent);
            }
        });
    }
}
 
Zuletzt bearbeitet:
Deine App ist ja doof @flashback.
Da muss man ja selbst die den aktuellen Dollar betrag eingeben.

Der eigentlich nächste logische schritt wäre, die Webseite im Hintergrund aufzurufen (beim starten der App z.B.) und sich den kurs automatisch zu holen.
Diesen dann in den SharedPreferences speichern.
Dann hat man auch wieder jedemenge dazu gelernt:
- AsyncTask
- Parsen
- SharedPreferences
- Generell Android erfahrung

Gruß

Ice
 
Hab nicht gesagt, das ich ein Profi bin.

Kannst ja mal erklären wie das geht. Würde mich auch mal interessieren. Danke.

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Hi,

war vielleicht bisschen doof formuliert ;)
Jeder fängt mal klein an.

Habe doch schon was erklärt. Schau dir AsnyTask an. Damit erstellst du einen "Hintergrund"-prozess.
Der sieht ungefähr so aus:
Code:
1. Mache was, bevor etwas längeres passiert. 
Beispiel: Erstelle ein Dialog mit "Lade News"

2. Mach jetzt das ganze hintergrund zeug.
Beispiel: Hole den Quelltext von einer Internetseite und parse ihn.
Speichere "wichtige" daten ab.

3. Was passiert, wenn das hintergrundzeug fertig ist.
Beispiel: Die gespeicherten Daten kannst du jetzt auf dein Layout legen :)

Gruß
 
@IceClaw: Erstmal danke für deinen Hinweiß mit dem überflüssigem "bla".
Das habe ich geändert. Ist mir auch jetzt auch klar, dass das überflüssig war^^

Ich hoffe, dass passt nach eurer kleinen Diskussion hier noch rein:

Ich habe festgestellt, dass wenn man keinen Wert eingibt, sich die App beendet.
Dies muss ich natürlich ändern.

Aus einer anderen App kenne ich noch:

Code:
if (name.length() == 0)
		{
			new AlertDialog.Builder(this)
				.setMessage(R.string.error_name_missing)
				.setNeutralButton(R.string.error_ok, null)
				.show();
		}

Dies hat leider nicht funktioniert.
Ich habe auch folgendes probiert:

Code:
if (eingabe.isEmpty())
		{
			new AlertDialog.Builder(this)
				.setMessage(R.string.error_name_missing)
				.setNeutralButton(R.string.error_ok, null)
				.show();
		}

Brachte aber auch keinen Erfolg.

Ich glaube es liegt daran, das die Aufgabe nicht gestoppt wird.

Kann mir bitte jemand helfen?
Damit der Prozess nicht mehr beendet wird, wenn keine Eingabe erfolgt.

Danke!

Gruß
 
Zuletzt bearbeitet:
Du kannst checken, ob das edittext-feld leer mit:

- .length() > 0 --> wenn nicht dann leer
- .equals(" " ) --> wenn das erfüllt ist, ist es leer
- .matches(" " ) --> wenn das erfüllt ist, ist es leer

Die Prüfung packet du in den if zweig, wenn er true ist zeigt du einen Toast. Im else Zweig packst du deine Berechnung.

Gesendet von meinem Nexus 4 mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: Feelix333
Danke!
Ich habe jetzt if (eingabe.istEmpty()) dann ergebnis = 0 gemacht.
Und dann else die Berechnung.

Scheint zu funktionieren ;-)
 
Zurück
Oben Unten