Währungsrechner App selbst programmieren

  • 37 Antworten
  • Letztes Antwortdatum
Also ich hab mich grad aus langeweile mal hingesetzt (wollte mich was ins neue AndroidStudio einarbeiten) und hab die APP mal geschrieben.

Für jemanden der sich in Android auskennt ist das eine Sache von nichtmal 2 Stunden.
Ich habe es mit der Google Exchange API gemacht und finde das ist ne sehr schöne, saubere Lösung.

Da du noch 2 Wochen Zeit hast empfehle ich dir dich hinzusetzen und das mal zu üben.
Es sind schon einige Stichpunkte gefallen:

Ich sag auch nochmal, welche reichen Sollten:

Google Exchange API
JSON Parsing (ca 4 zeilen Code)
Restful WebService call (gibt gute Tutorials dazu die du sicher fast 1:1 übernehmen kannst)
Fürs Layout: TextView, Spinner, Button, EditText

Viel Spaß beim programmieren.
 
@Buster wie weit bist du denn überhaupt mit deiner APP, ich meine funktioniert die APP an sich denn schon? Also kann man USD und EUR wählen, und dann den Wert berechnen?

Wenn nicht würde ich damit erstmal anfangen. Hauptsache du hast irgendwas in der Hand. Und dann hast du ja noch reichlich Zeit dir für die Aktualisierung was auszudenken. Notfalls machst du eben eine Seite auf der man den Kurs manuell eingeben muss. Btw: wenn du mit konkreten Fragen kommst, also z.B. einem Codeschnippsel, und dann fragst wo da der Fehler liegt, dann hast du auch gute Chancen dass dir weiter geholfen wird. Aber etwas Arbeit musst du schon selbst leisten :)
 
Hallo zusammen,

Ich habe mir einen Euro-Dollar Währungsrechner programmiert.
(https://play.google.com/store/apps/details?id=com.ff.euro_dollar)

Dieser funktioniert im Moment noch mit einem festen Kurs (1,3072).
Ich möchte nun aber, das sich dieser Wert aktualisiert.

Es wurden hier 4 Möglichkeiten erwähnt, welche davon ist am einfachsten zu realisieren?

1. Du stellst auf einem Server von dir Dateien bereit, die du von Hand aktualisirst.
2. Du suchst eine Webseite und parst den HTML inhalt.
3. Du suchst eine Website die das ganze evtl. als RSS Feed bereitstellt.
4. Du suchst eine Website, die eine API bietet und das aktuelle ERgebnis auf Anfrage des Gerätes per JSON oder XML zurückgibt.

Eine Möglichkeit war glaube ich auch, einen RSS Feed zu schreiben und auf Dropbox hochzuladen?

Kann mir jemand ein bisschen helfen, ich weiß gerade gar nicht wo und wie ich anfangen soll..

Vielen Dank.

Gruß
Felix
 
Die einfachste ist die Google API zu nutzen!
Das sind 20Zeilen verständlicher Code
 
  • Danke
Reaktionen: Feelix333
Die Google Exchange API die mister-viper erwähnt hat?

Kannst du mir erklären wie/was ich mit der Google API anstellen soll oder bitte einen Link schicken?
Finde auf Google gerade nichts brauchbares.

Danke! :)
 
Hab mich Grade mal hingesetzt weil ich mit meinem Programm nicht weiter gekommen bin und die App in nicht einmal 10 Minuten geschrieben dazu kamen noch einmal 5 Minuten für das Design.

Sieht zwar nicht Super aus macht aber was Sie soll.

Ich denke mal ein Anfänger mit den ganzen Infos hier braucht dafür eine gute
Woche mit Bearbeitung einiger Tutorials.


Gesendet von meinem LG-P880 mit der Android-Hilfe.de App
 
Zuletzt bearbeitet:
Die fertige App funktionierend - allerdings mit festem Kurs (1,3072) - und mit Design habe ich schon!

Ich bräuchte nur noch Hilfe bei der Funktion, dass sich der Wert aktualisiert.

Kann mir bitte jemand helfen?
Ich bin wie gesagt Anfänger und tu mir da jetzt gerade schon sehr schwer..
 
Hi,

du hast unter diesem Link eine Antwort. Das stellt Google genau so bereit und aktualisiert es für dich. Du kannst in der URL entsprechend auch USD und Euro tauschen.
Zurück bekommst du einen JSON-String.

Deine Aufgabe ist jetzt:
Beim starten der App musst du via AsyncTask die Daten holen. Diese am besten dann in ein SharedPreferenece speichern.

Gruß

Stefan
 
  • Danke
Reaktionen: Feelix333
DANKE!! :)

Ich setz mich jetzt mal hin und schau was raus kommt ;)
Wenn ich wo hängen bleib melde ich mich wieder.

Gruß
 
Hallo,
kann mir jemand mit Code weiterhelfen?
Ich bin glaube ich etwas überfordert..

Wäre echt super!
Gruß
 
Nein.
Du darfst gerne fragen stellen (vorallem spezifische) und dann gibt es Antworten und evt. samples...
Aber niemand hier wird dir einen fertigen Code hinschreiben. Zumal man davon ja sehr viel lernt :O

Gruß
 
Also die JSON-Strings lauten:

Euro in Dollar:
(http://rate-exchange.appspot.com/currency?from=EUR&to=USD)

{"to": "USD", "rate": 1.3129999999999999, "from": "EUR"}

Dollar in Euro:
(http://rate-exchange.appspot.com/currency?from=USD&to=EUR)

{"to": "EUR", "rate": 0.76161462300000005, "from": "USD"}

Ich habe eine "DownloadFilesTask"-Klasse:

Code:
package com.example.DownloadFilesTask;

import java.net.URL;
import android.os.AsyncTask;

class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
            // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return totalSize;
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    private void setProgressPercent(Integer integer) {
		// TODO Auto-generated method stub
		
	}

	protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }

	private void showDialog(String string) {
		// TODO Auto-generated method stub
		
	}
}

Eine "Downloader"-Klasse:

Code:
package com.example.DownloadFilesTask;

import java.net.URL;

public class Downloader {

	public static long downloadFile(URL url) {
		// TODO Auto-generated method stub
		return 0;
	}

}

Und jetzt muss ich von meiner MainActivity aus

Code:
new DownloadFilesTask().execute(url1, url2, url3);

ausrufen?

Ich glaube irgendwie fehlt mir noch der Aufhänger..

mfg
Felix
 
Also einfacher geht das mit Gson.

Gson gson = new Gson();
URL url = new URL("http://url");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ConverterRate rate = gson.fromJson(new InputStreamReader(in), ConverterRate.class)
finally {
urlConnection.disconnect();
}
}

Dazu noch eine Klasse erstellen die ConverterRate heißt und die
folgende Variablen enthält:
String to;
String from;
Double rate;

Danach hast du dann in "rate" alle infos die du brauchst.

Doku:
https://sites.google.com/site/gson/gson-user-guide

HttpURLConnection | Android Developers
 
  • Danke
Reaktionen: Feelix333
Ansonsten wäre vlt. auch mal ein Blick auf Volley interessant. Damit scheint sowas auch extrem einfach und schnell realisierbar zu sein.
 
  • Danke
Reaktionen: Feelix333
Hi,

du machst bisher alles richtig. Nur die Verknüpfung fehlt dir irgendwie ;)

Im Task hast du ja im onPostExecute() eine ausgabe. Wird dir da das richtige angezeigt? Dann hast du da erstmal alles richtig gemacht.

Die Downloader-Klasse brauchst du gar nicht. Die macht ja auch nichts :) Also wofür?

Dieses hier:
Code:
new DownloadFilesTask().execute(url1, url2, url3);
Startest du am besten am Anfang deines Programmes. Also jedesmal, wenn er die App neu öffnet. (onResume auch!)
Wobei du ja an AsyncTask<URL, Integer, Long> <- nicht 3 urls übergibst. Sondern eine URL, ein Integer und ein Long.. Deshalb stimmt da was noch nicht ;)

So, zurück im onPostExecute():
Hier hast du ja dann die Daten. Entweder kannst du dann via RegEx alles wegwerfen, was du nicht brauchst. Oder das JSON-Objekt "filtern". Dann steht zum Schluss nur noch deine Angabe da.
Nachdem du dann nur noch die Zahl hast, also den umrechnungskurs, kannst du diesen in eine Preference-Speichern.

Gruß
 
  • Danke
Reaktionen: Feelix333
Hey,

Vielen Dank erstmal! :))


Nein, ich bekomme noch keine Ausgabe.

Wenn ich die Downloader-Klasse nicht habe, wird mir bei
Code:
totalSize += Downloader.downloadFile(urls[i]);
aber der Fehler "Downloader cannot be resolved" angezeigt.
Muss ich statt der Klasse eine Konstante oder eine Variable erstellen?

Beim AsyncTask<URL, Integer, Long> muss es dann heißen
Code:
new DownloadFilesTask().execute(URL,  count, totalSize);
was mir noch fehlt, ist wo ich die URL (schon die zum JSON-String?!) definiere?

Was ist im onPostExecute() einfacher? ;)
Ich hätte jetzt gesagt das Filtern nach der Zahl.

Gruß
Felix
 
FelixF schrieb:
Hey,

Vielen Dank erstmal! :))


Nein, ich bekomme noch keine Ausgabe.

Wenn ich die Downloader-Klasse nicht habe, wird mir bei
Code:
totalSize += Downloader.downloadFile(urls[i]);
aber der Fehler "Downloader cannot be resolved" angezeigt.
Muss ich statt der Klasse eine Konstante oder eine Variable erstellen?

Beim AsyncTask<URL, Integer, Long> muss es dann heißen
Code:
new DownloadFilesTask().execute(URL,  count, totalSize);
was mir noch fehlt, ist wo ich die URL (schon die zum JSON-String?!) definiere?

Was ist im onPostExecute() einfacher? ;)
Ich hätte jetzt gesagt das Filtern nach der Zahl.

Gruß
Felix


Code:
totalSize += Downloader.downloadFile(urls[i]);
Es ist unmöglich vorher vorauszusehen wie Lange der Download dauert es gibt einfach so viel das schief gehen kann. Wenn du Das ganze im onPostExecute abwickelst bist du dir sicher das der Vorgang beendet.
 
Vielleicht hätte ich mir mal dein Quelltext besser anschauen sollen ;)

Ich habe keine Ahnung was du da genau im doInBackrgound() machst. Für mich ergibt das irgendwie keinen Sinn :O
Also du musst ins doInBackground mit HttpUrlConnection arbeiten.
Im Link steht wie das funktioniert und wie du dann an die daten kommst ;)

Gruß
 

Ähnliche Themen

L
Antworten
1
Aufrufe
118
swa00
swa00
migi01
Antworten
26
Aufrufe
810
migi01
migi01
D
Antworten
5
Aufrufe
290
swa00
swa00
BerndFfm
Antworten
7
Aufrufe
898
swa00
swa00
S
Antworten
27
Aufrufe
888
swa00
swa00
Zurück
Oben Unten