Erste Schritte Aktuelle Uhrzeit auslesen

Hannah

Mitglied
hallo

Frohes Neues

ich möchte die Differenz von einer festen Uhrzeit zur Aktuellen Uhrzeit ermitteln
und das jede Minute.
Wie mach ich das am besten
Vieleicht kann mir ja jemand helfen
Danke

hannah
 

Hannah

Mitglied
hallo,

danke schon mal

ne Schleife möchte ich eigentlich nicht so gerne:)
ich mach es unter einem Button.
Wenn ich drauf klicke wird die Differenz berechnet.

das auslesen der aktuellen Uhrzeit hab ich hin bekommen
in Millisekunden und dann umrechnen nach HH:mm:ss

Mein Problem ist grade die Startzeit , die ich in einem EditText(StartZeit) festlege
zb. 12:00

Diese müsste ich ja jetzt auch in millisekunden haben um die Differenz zu berechnen!
Und im gleichen String Format (Long)
Das klappt irgenwie net;(

-hannah
 

Hannah

Mitglied
hallo,
so hab ich es grade
wie gesagt scheiter ich grade daran das EditText(Startzeit)
weiter zu verarbeiten.
habs schon versucht ein 2tes SimpleDateFormat zu machen
hat aber auch nicht hingehauen.
komme grade überhaupt nicht weiter;(



Java:
public class MainActivity extends Activity {
	
	@SuppressLint("SimpleDateFormat")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
	// ****** Anzeige vom Datum ************************************************
	SimpleDateFormat dt = new SimpleDateFormat("EE, dd MMM yyyy",Locale.GERMAN);
	String Datum = dt.format(Calendar.getInstance().getTime());
	TextView MeinDatum = (TextView) findViewById(R.id.AnzeigeDatum);
	MeinDatum.setText(Datum);
	// **********************************************************************
		
	Button test =(Button) findViewById(R.id.KlickButton);
		
	test.setOnClickListener(new View.OnClickListener()
	{
		public void onClick(View v)
		{
	//********* Startzeit Eingabe im EditText zb.12:00
	EditText Startzeit = (EditText)findViewById(R.id.ZeitEingabe);
	//***************************************************************
	TextView Ausgabe =(TextView)findViewById(R.id.ZeitDifferenz);
	
	long time = System.currentTimeMillis();
	System.out.println(time);
	
	String Stunden = ""+time / (60 * 60 * 1000);//Stunden
	String Minuten = ""+time / (60 * 1000) % 60;//Minuten
	String Sekunden = ""+time / 1000 % 60;//Sekunden
	
	Ausgabe.setText(Stunden + ":" + Minuten + ":" + Sekunden);	
	
		}
		});
 

kaoZ

Top Contributor
Du ermittelst mit
Java:
long startTime = new Date().getTime();
die aktuelle Zeit.

(bzw. ms die seit dem 01.01.1970 00.00 Uhr vergangen sind)

Wichtig ist das du hier als typ long wählst.

das gleiche machst du mit der endzeit
Java:
long endTime = new Date().getTime();

dann errechnest du die differenz

z.B
Java:
completeTime = endTime - startTime;

completeSeconds = completeTime / 1000 % 60;
completeMinutes = completeTime / (1000 * 60) % 60;
complenteHours = completeTime / ( 1000 * 60 * 60) % 24;

//dann gibst du das Ergebnis als formatierten String aus 

String result = String.format("%02d:%02d:%02d", completeHours, completeMinutes, completeSeconds);

Ausgabe Bsp:

01:42:53

fertisch ;)

[EDIT]
Wenn du Zeiten selber eingeben willst würde ich dir empfehlen diese in ms zu konvertieren , so kannst du auch einfach differenzen zu dem in Java verwendetem Referenzdatum (01.01.1970 00.00Uhr) errechnen usw...[/EDIT]
 
Zuletzt bearbeitet:

Hannah

Mitglied
hallo,

danke erst mal

aber es gibt keine Endzeit !!

nur eine Startzeit, und die gebe ich in ein EditText Feld ein ( zb.12:00)

wie rechne ich diese Zeit in Millisekunden um und steck die in eine Varable ?

Da ist mein Latein zur Zeit am Ende:)

Sagen wir es ist jetzt zb. 18:15
als Startzeit habe ich 12:00 eingegeben
Ich drück meinen Button
und er gibt mir 6:15:00 aus

dann drück ich zb. um 18:30
und er gibt mir 6:30 aus

so sollte das eigentlich sein

gruß hannah
 

TH3ON1YN00B

Mitglied
Der Code sollte dir weiterhelfen:

Java:
String from_time = startZeit.getText().toString();
String[] time_split = from_time.split(":");
boolean hasSeconds = time_split.length == 3 ? true : false;

SimpleDateFormat format = hasSeconds ? new SimpleDateFormat("HH:mm:ss") : new SimpleDateFormat("HH:mm");
Date from = format.parse(time);

long diff = from.getTime() - new Date().getTime();
 
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);

Leider kann ich ihn gerade nicht Testen :/

Grüsse
Joel
 
Zuletzt bearbeitet:

Sen-Mithrarin

Gesperrter Benutzer
1) solche wichtigen infos wie das es sich um eine android-app handelt gehören schon mal grundsätzlich in den ersten post
dann wäre die idee mit dem loop schon mal gar nicht gekommen um so einen crash der app zu verhindern

2) wenn du NUR eine uhrzeit im format HH:MM eingibst, dann nimmst du diese und packst das aktuelle datum selbst dazu
damit ergibt sich dann wieder ein gültiger referenzwert zum unix-epoc (01.01.1970 0:00 GMT) den du dann wieder einfach gegen System.getTimeMillis() verrechnen kannst
legst noch n filter drüber der die zeitzone und das datum rauszieht und hast die vergangen zeit als uhrzeit am 01.01.1970 ... einfach nur die uhrzeit ohne datum ausgeben > fertig

3) gewöhn dir an solche einfachen dinge zu googlen ... denn die frage wurde, mit sicherheit auch in bezug auf android, schon mehr als oft genug beantwortet

btw : sowas sollte man eigentlich drauf haben wenn man sich mit android beschäftigt ... aber naja ... sche!ß auf grundlagen und lieber gleich volles rohr drauf los ... dann kommt sowas bei raus ... wir sehen es ja immer wieder
 

Hannah

Mitglied
@ Joel
die Fehlermeldung die ich auch schon 459 x hatte

The method parse(String) in the type DateFormat is not applicable for the arguments (long)
Java:
Date from = format.parse(time);

gruß hannah
 

TH3ON1YN00B

Mitglied
Sorry da hab ich was falsch geschrieben... Es müsste bei meinem codebeispiel from_time anstatt time heissen

Gruss

Gesendet von meinem GT-I9100 mit Tapatalk
 
Zuletzt bearbeitet:

TH3ON1YN00B

Mitglied
Okay

Wenn ein String verlangt wird und du eine nummer hast, kannst du sie übrigens mit ""+nummer(-variable) in einen String umrechnen.

Gesendet von meinem GT-I9100 mit Tapatalk
 

TH3ON1YN00B

Mitglied
(Leider kann ich am Handy keine Java tags machen)

long number = 12345L;
String number_ = number + "";

System.out.println(number_);// 12345

Gesendet von meinem GT-I9100 mit Tapatalk
 

kaoZ

Top Contributor
Um es mal langsam anzugehen

aber es gibt keine Endzeit !!

Java:
endTime = new Date().getTime(); //Sagen wir es ist jetzt zb. 18:15

als Startzeit habe ich 12:00 eingegeben

Hier mal ein Ansatz :

[EDIT]
Hier allerdings anhand eines Scanners , anstelle eines EditText Feldes realisiert, umsetzung ist simpel
[/EDIT]
Java:
package tests;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;


	/**
	 * 
	 * @author kaoZ
	 *
	 */

public class Foo {
	
	public Foo() {
		SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
		
		long endTime = new Date().getTime(); // Hier nehmen wir die aktuelle Zeit ( als Endzeit )
		
		Scanner sc = new Scanner(System.in);
		
		String[] splitted = sc.nextLine().split(":"); // splittet bei ":"
		sc.close();
		
		long startHours = Long.parseLong(splitted[0]) * (1000 * 60 * 60); //erste Zahl = Stunden
		
		long startMinutes = Long.parseLong(splitted[1]) * (1000 * 60); //zweite Zahl = Minuten
	
		long startSeconds = Long.parseLong(splitted[2]) * 1000; //dritte Zahl = Sekunden

		long startMillis = startHours + startMinutes + startSeconds; // gesamt Millisekunden
		
		System.out.println(startMillis); // TEST
		
		System.out.println(f.format(endTime - startMillis)); // Differenz zwischen jetzt und der Eingabe

Ausgabe (grade ebend) :

00:00:00 // Eingabe
0 // Startzeit in Millisekunden
00:24:58 // Differenz zwischen Startzeit und jetzt 



	}
	public static void main(String[] args) {
		new Foo();
	}
}
 
Zuletzt bearbeitet:

Hannah

Mitglied
hallo KaoZ

danke für deine Bemühungen
aber wenn ich dein Klasse teste kommt als Ergebnis in der Console nichts!!

Das liefert bei Vorgabe der Startzeit im code >>> String Startzeit = "04/01/14 22:00:00"
genau das richtige Ergebnis.

Nützt mir aber nix, weil ich die Startzeit nicht im Code vorgeben kann
sonder in ein Textfeld eingebe und dann berechne.
Hab ich glaube ich aber schon in meinen anderen Posts geschrieben.


Console:
Minuten: 15 minutes.
Stunden: 1 hours.
Laufende Zeit: 1:15:14
75.23333333333333 Minuten Dezimal
1.2538888888888888 Stunden Dezimal
Sat Jan 04 22:00:00 CET 2014 Startzeit
Sat Jan 04 23:15:14 CET 2014 Aktuelle Uhrzeit
-----------------------------------------------
Java:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;


public class TimeDiff02 {

public static void main(String[] args)
{
	String Startzeit = "04/01/14 22:00:00";

    double StundenDezimal;
    double MinutenDezimal;
    String RestZeit;
    
	SimpleDateFormat format = new SimpleDateFormat("dd/mm/yy HH:mm:ss");  
	SimpleDateFormat sZeit = new SimpleDateFormat("dd/mm/yy HH:mm:ss");
	
	String AktuelleUhrzeit = sZeit.format(new Date());
	sZeit.setTimeZone( TimeZone.getDefault() );

	Date d1 = null;
	Date d2 = null;
	try {
	    d1 = format.parse(Startzeit);
	    d2 = sZeit.parse(AktuelleUhrzeit);
	       
	} catch (ParseException e) {
	    e.printStackTrace();
	}    
	long diff = d2.getTime() - d1.getTime();
	long diffSeconds = diff / 1000 % 60;         
	long diffMinutes = diff / (60 * 1000) % 60;         
	long diffHours = diff / (60 * 60 * 1000);                      
	System.out.println("Sekunden: " + diffSeconds + " seconds.");         
	System.out.println("Minuten: " + diffMinutes + " minutes.");         
	System.out.println("Stunden: " + diffHours + " hours."); 
	
	//System.out.println("Restzeit: " + diffHours + ":" + diffMinutes + ":" + diffSeconds );
	RestZeit =(diffHours + ":" + diffMinutes + ":" + diffSeconds );
	System.out.println("Laufende Zeit:" + " " + RestZeit);
	//System.out.println(d2.getMinutes());
    //System.out.println(diff/60000.0 + "Minuten");
    //System.out.println(diff/3600000.0 + "Stunden");
    
	MinutenDezimal = ( diff / 60000.0);
    StundenDezimal = (diff/3600000.0);
    //Double num = Double.parseDouble(number.getText().toString());
    System.out.println(MinutenDezimal + " " + "Minuten Dezimal");
	System.out.println(StundenDezimal + " " + "Stunden Dezimal");
	
	System.out.println(d1 + " " + "Startzeit");
	System.out.println(d2 + " " + "Aktuelle Uhrzeit");
	
}
}
 

kaoZ

Top Contributor
Das nix erscheint wenn du in der main methode ein neues Objekt meiner klasse erstellst , liegt daran das ich einen scanner zum testen verwendet habe, wenn du die applikation startest kannst du eine zeit in der console eingeben

in folgendem format
Code:
12:22:13

erst dann erscheint die eingegebene zeit in Millisekunden und die Differenz zur aktuellen zeit :)

es ist im Prinzip das gleiche wie bei deinem EditText feld, nur das ich hier eine Konsolenversion erstellt habe und du eine Android application, du müsstest also einfach

meinen Scanner löschen und es für dein EditText feld umsetzen

z.B

Java:
String[] tokens = editText.getText().split(":"); // hier die eingabe deines Textfeldes auslesen und splitten

// und dann halt wie in meiner applikation

long startHours = Long.parseLong(String.valueOf(tokens[0]) * (1000 * 60 * 60);

//usw usw...
 

Sen-Mithrarin

Gesperrter Benutzer
Okay

Wenn ein String verlangt wird und du eine nummer hast, kannst du sie übrigens mit ""+nummer(-variable) in einen String umrechnen.

Gesendet von meinem GT-I9100 mit Tapatalk

nein , nein , nein ... sowas macht man ja mal garantiert NICHT !

wenn man einen primitiven numerischen datentyp in einen String umwandeln will nutzt man dazu GRUNDSÄTZLICH z.b. String.valueOf(int) !
oder umgekehrt die warper-methoden wie z.b. Integer.toString(int)

nix da mit völlig unnützer String-konkatierung



wenn man selbst n anfänger ist und es einfach nicht besser weis sollte man solche antworten nicht geben
 

Hannah

Mitglied
hallo kaoZ

in der console kann ich nichts eingeben. hmmmm
du meinst doch die console wo auch die printIns ausgegeben werden?

Aber es funktioniert jetzt :applaus:
Herzlichen Dank :applaus:

Jetzt kann ich mit dem Wert weiter rechnen *omg

Hatte aber noch einen entscheidenen Fehler drin
und zwar hatte ich das EditText Feld auf 5 Zeichen begrenzt (12:00),
da die Startzeit immer bei einer vollen Minute beginnt!
Habe das jetzt auf 8 Zeichen gesetzt (12:00:00)
und dann hat es geklappt.

So sieht es jetzt aus

Java:
	// ****** Anzeige vom Datum ************************************************
	SimpleDateFormat dt = new SimpleDateFormat("EE, dd MMM yyyy",Locale.GERMAN);
	String Datum = dt.format(Calendar.getInstance().getTime());
	TextView MeinDatum = (TextView) findViewById(R.id.AnzeigeDatum);
	MeinDatum.setText(Datum);
	// ******************************OK***************************************
	
	Button test =(Button) findViewById(R.id.KlickButton);	
	test.setOnClickListener(new View.OnClickListener()
	{
		public void onClick(View v)
		{

			SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
			long endTime = new Date().getTime();
			//Scanner sc = new Scanner(System.in);
			
			EditText Eingabe = (EditText)findViewById(R.id.MeineZeitEingabe);
			TextView Ausgabe = (TextView)findViewById(R.id.MeineZeitStunden);

			//String[] splitted = sc.nextLine().split(":"); // splittet bei ":"
			//sc.close();
			String[] splitted = Eingabe.getText().toString().split(":");

			long startHours = Long.parseLong(splitted[0]) * (1000 * 60 * 60); //erste Zahl = Stunden

			long startMinutes = Long.parseLong(splitted[1]) * (1000 * 60); //zweite Zahl = Minuten

			long startSeconds = Long.parseLong(splitted[2]) * 1000; //dritte Zahl = Sekunden

			long startMillis = startHours + startMinutes + startSeconds; // gesamt Millisekunden

			System.out.println(startMillis); // TEST
			System.out.println(f.format(endTime - startMillis)); // Differenz zwischen jetzt und der Eingabe
	        
			Ausgabe.setText(f.format(endTime - startMillis));
		}
		});		
			
	}

gruß hannah
und einen schönen sonntag
 

kaoZ

Top Contributor
Welche IDE nutzt du ? ich habe keine Ahnung wie das z.B bei netBeans aussieht aber wenn ich meine Applikation bei mir starte ( Eclipse ) sieht das so aus :

(um das zu veranschaulichen habe ich an dieser Stelle nochmal einen sysout eingefügt)

Java:
System.out.println("Bitte geben Sie die gewünschte Uhrzeit ein :"); // Hier

String[] splitted = sc.nextLine().split(":"); //Hier wartet der Scanner auf eingaben
sc.close();



solange ich dann die eingegebene Uhrzeit nicht bestätige wartet der Scanner auf eine Eingabe, zu erkenne an diesem Symbol ( programm wird weiter ausgeführt )



[EDIT]Falls es unrelevant sein sollte , ebenfalls schönen Sonntag noch :)[/EDIT]
 
Zuletzt bearbeitet:

Hannah

Mitglied
hallo,

ich nutze Eclipse
der Cursor blinkt , aber nimmt keine Zeichen an
und das rote Symbol sehe ich auch nicht.

aaah ...grad noch mal ne Frage

wie teile ich 225566 durch 157,456
müssen die Zahlen beide in einen DoubleString?
Weil die 2 te Zahl hat ja Kommastellen.
wenn ich teilen will kommt die Fehlermeldung "Operator nicht zulässig...." (/)

-hannah-
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Wenn deine Eingabe ein String sein sollte musst du erst deinen double wert daraus parsen,
Java:
double a = Double.parseDouble(beispielString);



ansonsten kannst du das so machen :

wie teile ich 225566 durch 157,456

[TIPP]In Java werden Gleitpunktzahlen mit einem "." geschrieben nicht mit ","[/TIPP]

z.B so
Java:
double a = 225566.0;
double b = 157.456;

double ergebnis = a / b ;

System.out.println(String.format("%.2f", ergebnis));

//Das Ergebnis wird hier z.B durch die Formatierung nur bis auf 2 Nachkommastellen ausgegeben
 

Hannah

Mitglied
gar net so einfach
ich war sehr nah dran:)

Java:
			DecimalFormat deziFormat = new DecimalFormat("0000.000");

			double Me= Double.parseDouble(EingabeE.getText().toString());
			double Mi =  Double.parseDouble(AusgabeM.getText().toString());
			
		    double mprom = Me/Mi;
			
            AusgabeF.setText (deziFormat.format(mprom));
 

kaoZ

Top Contributor
wenn du aus einem Textfeld auslesen solltest kannst du es auch so machen


Java:
double xyz = Double.parseDouble(editText.getText().toString().replace("," , "."));

So kann man auch ruhig 125,25 eingeben und das Komma wird automatisch durch einen Punkt ersetzt ;)


[TIPP]
Kleiner Tipp am Rande:

Du solltest beachten das beim Parsen eine Exception geworfen werden könnte, demach solltest du allgemein beim parsen einen Try/Catch block verwenden :)
[/TIPP]

z.B

Java:
try{
  double xyz = Double.parseDouble(editText.getText().toString().replace("," , ".")); 
}catch(Exception ex){

  // hier kannst du code ausführen lassen wenn beim parsen/ersetzen etwas schief gehen sollte, oder eine eingabe nicht den vorgaben entspricht 
}
 
Zuletzt bearbeitet:

Hannah

Mitglied
es geht so

ich habe jetzt in einem ButtonKlick 2 Berechnungen hinter einander
kann man da was einbauen, das der warten soll bis die erste Berechnung fertig ist
ich denke aber das das ziemlich ungünstig ist ..oder
 

kaoZ

Top Contributor
poste mal den Code deiner Berechnung , dann schau ich da mal drüber

[EDIT]
sonst könnte man es über ein neuen (in dem Fall anonymen) Thread versuchen , allerdings weiß ich nicht wie sich das bei Android verhält, bzw hab ich das jetzt nicht getestet ob sowas da funktioniert
[/EDIT]

Java:
new Thread(){

  @Override
  public void run(){
     //Code der ausgeführt werden soll
  }
}.start();

oder du machst es folgendermaßen und verwendest das Ergebnis der ersten Berechnung als Parameter für die 2te

dann müsstest du aber die Methode so gestalten das sie dir , in deinem Fall z.B ein Double zurückliefert

Java:
public double rechnungEins(double a, double b){
    double ergebnis = a + b;
   
//Berechnungscode etc..

 return ergebnis; // liefert ein double mit dem Inhalt der berechnung zurück

}

während die 2te Methode ein double als parameter erwartet

Java:
public void rechnungZwei(double x){


// berechnung hier 
}

und der aufruf beim klick

Java:
@Override
public void onClick(ActionEvent event){

   berechnungZwei(berechnungEins(10.0 , 22.2)); // Sind natürlich dann auch 2 berechnungen bei einem Klick, was allerding kein Weltuntergang ist ^^
}

Ganz anderer Lösungsweg wäre das nutzen von Intents ( also einer separaten Activitiy für die 2te Berechnung ), natürlich nur insofern das in deinem Fall sinnvoll ist. (Dies ist allerdings auch etwas komplizierter, falls es notwendig ist liefere ich dir gern ein Beispiel :))
 
Zuletzt bearbeitet:

Hannah

Mitglied
hab das jetzt unter 2 Buttons
im Emulator läuft es

im Handy stürzt er ab, wenn ich das 2 te Button Ereigins aufrufe
das is natürlich doof

Java:
	// ****** Anzeige vom Datum ************************************************
	SimpleDateFormat dt = new SimpleDateFormat("EE, dd MMM yyyy",Locale.GERMAN);
	String Datum = dt.format(Calendar.getInstance().getTime());
	TextView MeinDatum = (TextView) findViewById(R.id.AnzeigeDatum);
	MeinDatum.setText(Datum);
	// ******************************OK***************************************
	
	Button ZeitFormat =(Button) findViewById(R.id.ZeitButton);	
	ZeitFormat.setOnClickListener(new View.OnClickListener()
	{
		public void onClick(View v)
		{
			SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
			long endTime = new Date().getTime();
			
			EditText Eingabe = (EditText)findViewById(R.id.ZeitEingabe);
			TextView AusgabeStunden = (TextView)findViewById(R.id.FlugzeitStunden);
			TextView AusgabeMinuten = (TextView)findViewById(R.id.FlugzeitMinuten);

			String[] splitted = Eingabe.getText().toString().split(":");

			long startHours = Long.parseLong(splitted[0]) * (1000 * 60 * 60); //erste Zahl = Stunden

			long startMinutes = Long.parseLong(splitted[1]) * (1000 * 60); //zweite Zahl = Minuten

			long startSeconds = Long.parseLong(splitted[2]) * 1000; //dritte Zahl = Sekunden

			long startMillis = startHours + startMinutes + startSeconds; // gesamt Millisekunden

			AusgabeStunden.setText(f.format(endTime - startMillis));
	//*********************************************************************************
			long SystemMillis = System.currentTimeMillis();
			double diffMillis = SystemMillis - startMillis;
			DecimalFormat deziFormat = new DecimalFormat("0000.000");
		AusgabeMinuten.setText(deziFormat.format(diffMillis % 36000000/60000));//Minuten Dezimal
    //*********************************************************************************			
		}
		});		
		
	Button FlugFormat =(Button)findViewById(R.id.FlugButton);		
	FlugFormat.setOnClickListener(new View.OnClickListener()
	
	{
		public void onClick(View v)

		{
			EditText EingabeEntfernung = (EditText) findViewById(R.id.EingabeEntfernung);
			TextView AusgabeMinuten = (TextView)findViewById(R.id.FlugzeitMinuten);
			TextView AusgabeFlugmeter = (TextView)findViewById(R.id.MeterProMinute);
			//TextView AusgabeKmh = (TextView)findViewById(R.id.KmHproStunde);
			
			
			DecimalFormat deziFormat = new DecimalFormat("0000.000");
	
			double Meter = Double.parseDouble(EingabeEntfernung.getText().toString());
			double Min =  Double.parseDouble(AusgabeMinuten.getText().toString());
		    double mprom = Meter/Min;
            AusgabeFlugmeter.setText (deziFormat.format(mprom));
	
		}
});
	
	}
 

kaoZ

Top Contributor
Das ganze solltest du schon vor dem Buttonklick erledigen ( das gehört da nämlich nicht hin ):

Java:
		public void onClick(View v)

		{
			EditText EingabeEntfernung = (EditText) findViewById(R.id.EingabeEntfernung);
			TextView AusgabeMinuten = (TextView)findViewById(R.id.FlugzeitMinuten);
			TextView AusgabeFlugmeter = (TextView)findViewById(R.id.MeterProMinute);
			//TextView AusgabeKmh = (TextView)findViewById(R.id.KmHproStunde);
			
			
			DecimalFormat deziFormat = new DecimalFormat("0000.000");
	
			double Meter = Double.parseDouble(EingabeEntfernung.getText().toString());
			double Min =  Double.parseDouble(AusgabeMinuten.getText().toString());
		    double mprom = Meter/Min;
            AusgabeFlugmeter.setText (deziFormat.format(mprom));
	
		}
});
	
	}

warte mal einen augenblick ich schau mal intensiver drüber
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Also mal generell zum Aufbau deiner Klassen:

Java:
 EditText EingabeEntfernung = (EditText) findViewById(R.id.EingabeEntfernung);
TextView AusgabeMinuten = (TextView)findViewById(R.id.FlugzeitMinuten);
TextView AusgabeFlugmeter = (TextView)findViewById(R.id.MeterProMinute);

sowas gehört in die
Code:
onCreate();
Methode deiner Activity, da du ja beim laden deiner klasse bereits das Layout setzt, und dieses gleich schon mit den einzelnen Views bekanntgemacht werden sollte.

Alle Eigenschaften oder auch Instanzvariable / Member einer klasse sollten sollten , insofern mehrfach verwendet wie z.B

Java:
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");

sollten für alle Funktionen / Objekte der Klasse zugänglich sein und nicht lokal definiert werden , das reduziert die Codeverdoppelung.

Desweiteren solltest du deine Berechnungen in Methoden durchführen und nicht von dem Buttonklick abhängig machen , sprich dein Button sollte lediglich eine Methode aufrufen , die dann deine Berechnung durchführt

Java:
  Button FlugFormat =(Button)findViewById(R.id.FlugButton);       
    FlugFormat.setOnClickListener(new View.OnClickListener()
    
    {
        public void onClick(View v)
 
        {
           calculate(); // diese Methode wird durch deinen Buttonklick aufgerufen
    
        }
});

und so sieht dann z.B diese Methode aus

Java:
public void calculate(){
   
            DecimalFormat deziFormat = new DecimalFormat("0000.000"); // könnte man , insofern noch an anderer Stelle verwendet auch als Intanzvariable deklarieren;
    
            double Meter = Double.parseDouble(EingabeEntfernung.getText().toString());
            double Min =  Double.parseDouble(AusgabeMinuten.getText().toString());
            double mprom = Meter/Min;
            AusgabeFlugmeter.setText (deziFormat.format(mprom));
    
        }
});

}

man könnte sogar noch weiter gehen und sagen, man führt in der Methode nur die berechnung durch und lässt sich das Ergebnis zurückgeben, und das setzen des Textes übernimmt man manuell

Java:
public double calculate(){ // liefert ein double zurück

          double meter, time, ergebnis;

          meter = Double.parseDouble(EingabeEntfernung.getText().toString());
          time = Double.parseDouble(AusgabeMinuten.getText().toString());
          ergebnis = meter / time;

          return ergebnis;

}

und in der onClick() Methode dann

Java:
  Button FlugFormat =(Button)findViewById(R.id.FlugButton);       
    FlugFormat.setOnClickListener(new View.OnClickListener()
    
    {
        public void onClick(View v)
 
        {
          AusgabeFlugmeter.setText (String.valueOf(deziFormat.format(calculate())));
          
           //alternativ

          AusgabeFlugmeter.setText(String.format("%.2f", calculate());
    
        }
});

desweiteren könnte man um abstürze z.B bei fehlerhafter eingabe ( fehlender eingabe ) usw. eine if anweisung in die onClick methode einfügen und ggf dann einen Toast ausgeben lassen falls z.B ein Textfeld leer ist

Java:
  Button FlugFormat =(Button)findViewById(R.id.FlugButton);       
    FlugFormat.setOnClickListener(new View.OnClickListener(){
       
     @Override
     public void onClick(View v){
         
          if(EingabeEntfernung.getText().length() != 0 && AusgabeMinuten.getText().length() ! = 0){
         
                  AusgabeFlugmeter.setText(String.format("%.2f", calculate());
    
          }else{
                   Toast.makeText(this, "Sie müssen erst alle Felder ausfüllen" , Toast.LENGTH_SHORT).show();

});
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
So könnte z.B die klasse strukturiert sein (natürlich fehlen da jetzt abfragen , buttonViews etc. hier gehts ja nur um ein Beispiel):

Java:
package tests;

import java.text.SimpleDateFormat;

public class AndroidTest extends Activity implements OnClickListener{
	
	SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super(savedInstanceState);
		setContentView(R.layout.my_layout);
		
		EditText meterEingabeFeld = (EditText)findViewById(R.id.meter);
		EditText zeitEingabeFeld = (EditText)findViewById(R.id.zeit);
		EditText ergebniseFeld = (EditText)findViewById(R.id.ergebnis);
		
		//usw
			
	}
	
	public double calculate(){
		
		double meter, time, ergebnis=0;
		
		meter = Double.parseDouble(meterEingabeFeld.getText().toString());
		time = Double.parseDouble(zeitEingabeFeld.getText().toString());
		
		ergebnis = meter / time;
		
		return ergebnis;
	}
	
	@Override
	public void onClick(View view){
		
		if(meterEingabeFeld.getText().length() != 0 && zeitEingabeFeld.getText().length() != 0){
			
			ergebnis.setText(String.format("%.2f", calculate()));
			
		}
		Toast.makeText(this, "Sie müssen erst alle Felder ausfüllen !", Toast.LENGTH_LONG).show()
		
	}
	

}
 
Zuletzt bearbeitet:

Hannah

Mitglied
sieht auf jedenfall besser aus

wenn ich dich richtig verstehe
sollte ich für jede Berechnung eine Klasse erstellen?

mich nervt grade , das der im 2ten ButtonKlick das Programm einfach schließt
im Emulator funkt es.
spukt auch keinen Fehler aus.




wenn ich die Views der TextFelder unter
Java:
onCreate();
mache meckert der in der
Java:
public void onClick(View v)

ach so..du hast die onCreate auf Public gemacht

kommt aber trotzdem noch "The value of the local variable Eingabe is not used"
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
wenn ich dich richtig verstehe
sollte ich für jede Berechnung eine Klasse erstellen?


[EDIT]keine Klasse , eine Methode [/EDIT]

man könnte für jede Berechnung eine Activity erstellen, dies ist jedoch bei solch simplen dingen im normalfall nicht notwendig, es sei denn du hast mehrere layouts die mit den Daten arbeiten / weiterrechnen sollen


mich nervt grade , das der im 2ten ButtonKlick das Programm einfach schließt
im Emulator funkt es.
spukt auch keinen Fehler aus.

was steht im LogCat ??

sowas hatte ich mal ein Punkt "." erwartet wurde und er mir ein Komma "," übertragen hat, dannach habe ich 2 wochen gesucht .....:)


wenn ich die Views der TextFelder unter
Java:
onCreate();
mache meckert der in der
Java:
public void onClick(View v)

was steht wenn du mit der Maus auf das unterstrichene gehst ??

es kann sein das es zu einer Fehlermeldung führ da du den OnclickListener nicht in deine Klasse importierst so wie in meinem Beispiel , sondern anonyme Instanzen des Listeners für jeden deiner Buttons erstellst.

hast du / eclipse vielleicht bei den imports ausversehen
Code:
android.R
importiert ? falls ja den import mal löschen.

[EDIT]onCreate ist natürlich protected, hab das grad schnell freihand getippt , war mein fehler , ändert aber nichts daran das es trotzdem funktionieren müsste solange du von Activity ableitest[/EDIT]


kommt aber trotzdem noch "The value of the local variable Eingabe is not used"

Das sagt mir 2 dinge, zum einen hast du eine Lokale Variable mit dem Namen "Eingabe" die in deiner klasse / Methode nirgends verwendet wird, und zum anderen das du Variablen immer lowerCamelCase schreiben solltest :)
 
Zuletzt bearbeitet:

Hannah

Mitglied
Java:
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.os.Bundle;
//import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

LogCat
Java:
01-05 13:26:50.790: D/OpenGLRenderer(11655): Enabling debug mode 0
01-05 13:27:50.384: D/AndroidRuntime(11655): Shutting down VM
01-05 13:27:50.384: W/dalvikvm(11655): threadid=1: thread exiting with uncaught exception (group=0x418b4ac8)
01-05 13:27:50.404: E/AndroidRuntime(11655): FATAL EXCEPTION: main
01-05 13:27:50.404: E/AndroidRuntime(11655): java.lang.NumberFormatException: Invalid double: "0087,664"
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at java.lang.StringToReal.invalidReal(StringToReal.java:63)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at java.lang.StringToReal.parseDouble(StringToReal.java:269)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at java.lang.Double.parseDouble(Double.java:295)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at de.exa.datetime.MainActivity$2.onClick(MainActivity.java:82)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at android.view.View.performClick(View.java:4377)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at android.view.View$PerformClick.run(View.java:18044)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at android.os.Handler.handleCallback(Handler.java:725)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at android.os.Handler.dispatchMessage(Handler.java:92)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at android.os.Looper.loop(Looper.java:137)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at android.app.ActivityThread.main(ActivityThread.java:5306)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at java.lang.reflect.Method.invoke(Method.java:511)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
01-05 13:27:50.404: E/AndroidRuntime(11655): 	at dalvik.system.NativeStart.main(Native Method)
01-05 13:28:01.346: I/Process(11655): Sending signal. PID: 11655 SIG: 9

liegt bestimmt an den 2 vorgestellten Nullen>>> DezimalFormat 0000.000

ok jetzt läuft es ...das Replace war wohl doch erforderlich :)
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Java:
java.lang.NumberFormatException: Invalid double: "0087,664"

da ist dein übeltäter

komma "," statt einem Punkt "." ;)

und hier nochmal der hinweis darauf das du Try/Catch blöcke verwenden solltest

Java:
hreadid=1: thread exiting with uncaught exception (group=0x418b4ac8)

;)
 
Zuletzt bearbeitet:

Hannah

Mitglied
jetzt fluppt es ja wieder

nu mach ich mal eins nach dem anderen
immer nur das nächste Ziel anpeilen;)

im onCreate meckert er nur wenn ich die Views
aus den onClick(View v) rausnehme und ins onCreate setzte!

werde dann wohl alles neu machen, und dann
so wie du es beschrieben hast versuchen.

Vieleicht erst bei den beiden Büchern weitermachen.
 

kaoZ

Top Contributor
Das wichtigste ist , wie bei allem was man lernt, nicht nur trockene Theorie bis zum erbrechen zu verschlingen, Programmieren lernt man am besten , indem man Programmiert.

Klar sind Bücher wichtig, alleine schon um ein Grundverständnis aufzubauen, allerdings sollte man den Praktischen Teil auf keine Fall vernachlässigen ;), der wie ich finde am relevantesten ist wenn man sich neue dinge aneignen möchte.

Funktioniert es denn jetzt so wie du es wolltest ?(falls dem so sein sollte, bin ich einem Klick auf den Danke Button nicht abgeneigt :bae: )

[TIPP]Dann könntest du , um das jetzt gelernte zu vertiefen , dir z.B als nächstes Ziel vornehmen, den jetzt bereits von dir geschriebenen Code in sauberen , gut verständlichen , lesbaren und vor allem wart/erweiterbaren Code umzuschreiben.[/TIPP]

im onCreate meckert er nur wenn ich die Views
aus den onClick(View v) rausnehme und ins onCreate setzte!

ich bin mir zu 95% sicher das dies, an den anonym erstellten Listener Objekten liegt, ich hatte glaube ich damals ein ähnliches Problem unter Android, gelöst habe ich es dann indem ich einfach den Listener direkt in meiner Klasse implementiert habe,

Java:
public MeineTestKlasse implements OnClickListener{

//...
}


und die Buttons (views) anhand der Id unterscheide

z.B

Java:
@Override
public void onClick(View v){

  switch(v.getId()){

    case R.id.button1:
      //aktion wenn button1 angeklickt wird
break;
    case R.id.button2:
      //aktion wenn button2 angeklickt wird
break;
}
//usw
}
}
 
Zuletzt bearbeitet:

Hannah

Mitglied
ja es läuft dank deiner Hilfe

denk ich auch, wenn der Listener public ist sollte es gehen.
soweit bin ich aber noch net.

[TIPP]Dann könntest du , um das jetzt gelernte zu vertiefen , dir z.B als nächstes Ziel vornehmen, den jetzt bereits von dir geschriebenen Code in sauberen , gut verständlichen , lesbaren und vor allem wart/erweiterbaren Code umzuschreiben.[/TIPP]

Das werd ich auf jeden Fall machen!!
aber dann kommen bestimmt wieder Fragen :oops:


Schönen Sonntag
 
Zuletzt bearbeitet:

Hannah

Mitglied
hallo,
das wirft einen Fehler bei double
Code:
Syntax error on token "double", @ expected

Java:
    public double calculate(){
       
        double meter, time, ergebnis=0;
       
        meter = Double.parseDouble(meterEingabeFeld.getText().toString());
        time = Double.parseDouble(zeitEingabeFeld.getText().toString());
       
        ergebnis = meter / time;
       
        return ergebnis;
    }
 
Zuletzt bearbeitet:

Hannah

Mitglied
hallo,
noch da?

sieht das so schon besser aus?

die Button Views muss ich ja so zusagen im "onCreate" registrieren.
Wie geht das mit den TextViews und EditText ?

zb.
Java:
MeinDatum.setText(Datum);
würde in den Buttons nicht klappen!


Java:
	public SimpleDateFormat dt = new SimpleDateFormat("EE, dd MMM yyyy", Locale.GERMAN);
		String Datum = dt.format(Calendar.getInstance().getTime());
		
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		EditText MeinDatum = (EditText)findViewById(R.id.AnzeigeDatum);
		MeinDatum.setText(Datum);
		
		Button btTest1 = (Button) findViewById(R.id.button1);
		btTest1.setOnClickListener(this);
		Button btTest2 = (Button) findViewById(R.id.button2);
		btTest2.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	      switch(v.getId()){
	      
	        case R.id.button1:
	        	String text1 ="Button1 geklickt";
	    		Toast einToast1 = Toast.makeText(v.getContext(), text1, Toast.LENGTH_SHORT);
	    		einToast1.show();
	    break;
	        case R.id.button2:
	        	String text2 = Datum;
	    		Toast einToast2 = Toast.makeText(v.getContext(),text2, Toast.LENGTH_SHORT);
	    		einToast2.show();
	    break;
	    }		
	}	
}
 
Zuletzt bearbeitet:

Hannah

Mitglied
Kann man das so machen?
Dann würde es gehen

Java:
	public class MainActivity extends Activity implements OnClickListener{
		
	public SimpleDateFormat dt = new SimpleDateFormat("EE, dd MMM yyyy", Locale.GERMAN);
		String Datum = dt.format(Calendar.getInstance().getTime());
		EditText MeinDatum;
		EditText EingabeEntfernung;

Java:
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		MeinDatum = (EditText)findViewById(R.id.AnzeigeDatum);
		//MeinDatum.setText(Datum);
		EingabeEntfernung = (EditText)findViewById(R.id.EingabeEntfernung);
		
		Button btTest1 = (Button) findViewById(R.id.button1);
		btTest1.setOnClickListener(this);
		Button btTest2 = (Button) findViewById(R.id.button2);
		btTest2.setOnClickListener(this)

Java:
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	      switch(v.getId()){
	      
	        case R.id.button1:
	        	MeinDatum.setText(Datum);
	        	String text1 ="Button1 geklickt";
	    		Toast einToast1 = Toast.makeText(v.getContext(), text1, Toast.LENGTH_SHORT);
	    		einToast1.show();
	    break;
	        case R.id.button2:
	        	String text2 = Datum;
	    		Toast einToast2 = Toast.makeText(v.getContext(),text2, Toast.LENGTH_SHORT);
	    		einToast2.show();
	    break;
	    }		
	}	
}
 

kaoZ

Top Contributor
hallo,
das wirft einen Fehler bei double
Code:
Syntax error on token "double", @ expected

Java:
    public double calculate(){
       
        double meter, time, ergebnis=0;
       
        meter = Double.parseDouble(meterEingabeFeld.getText().toString());
        time = Double.parseDouble(zeitEingabeFeld.getText().toString());
       
        ergebnis = meter / time;
       
        return ergebnis;
    }

Also , hier bekomme ich bei mir keinen Syntax Fehler angezeigt, kannst du mal genau beschreiben an welcher stelle er den Fehler anzeigt oder ausgibt ?!

Java:
public class MainActivity extends Activity implements OnClickListener


genau das meinte ich , wenn du es mit dem Listener so machst sollte er das mit den TextFeldern nichtmehr als Fehler ausgeben :)


Das musst du nicht als public deklarieren, das public kannst du löschen

Java:
public SimpleDateFormat dt = new SimpleDateFormat("EE, dd MMM yyyy", Locale.GERMAN);


ausserdem solltest an dieser Stelle deklarieren:

Java:
public class MainActivity extends Activity implements OnClickListener{

   // Variablen immer lowerCamelCase ! 

   EditText meinDatum;
   EditText eingabeEntfernung;
   SimpleDateFormat dt;
   String datum;  
   
   @Override
   protected void onCreate(Bundle savedInstanceState){
        super(savedInstanceState);     

   dt = new SimpleDateFormat("EE, dd MMM yyyy", Locale.GERMAN);
   datum = dt.format(Calendar.getInstance().getTime());

   //usw...

[TIPP]
Außerdem solltest du überlegen ob man von außen (außerhalb dieser Klasse ) auf z.B datum zugreifen können muss/darf, ansonsten solltest du diese Attribute als private deklarieren, und öffentliche getter/Setter methoden schreiben.
[/TIPP]

Ebendso die Hardcoded Strings, kann man machen .... sollte man aber vermeiden

Java:
  case R.id.button1:
                MeinDatum.setText(Datum);
                String text1 ="Button1 geklickt";
                Toast einToast1 = Toast.makeText(v.getContext(), text1, Toast.LENGTH_SHORT);
                einToast1.show();
        break;

ggf.
Java:
  case R.id.button1:
                MeinDatum.setText(Datum);
                CharSequence text = String.valueOf(R.string.beispielText);  // verwendet die String resource
	        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
        break;


Das hier sollte folgendermaßen klappen:

Java:
MeinDatum.setText(Datum); // variablen immer lowerCamelCase :)

Java:
meinDatum.setText(String.valueOf(datum));

/*wobei eigentlich sollte der editText auch einfach so datum annehmen da es ja ein String ist
 *probier es einfach mal aus , und gib mir rückmeldung */


Zudem würde ich der übersicht halber sowas hier :

Java:
EditText MeinDatum = (EditText)findViewById(R.id.AnzeigeDatum);
MeinDatum.setText(Datum);
        
Button btTest1 = (Button) findViewById(R.id.button1);
btTest1.setOnClickListener(this);
Button btTest2 = (Button) findViewById(R.id.button2);
btTest2.setOnClickListener(this);

eher in blöcke aufteilen :

Java:
//-----------apply Views-------------
EditText meinDatum = (EditText)findViewById(R.id.AnzeigeDatum);

Button btTest1 = (Button) findViewById(R.id.button1);
Button btTest2 = (Button) findViewById(R.id.button2);
      
//-----------set Listener--------------
       
        btTest1.setOnClickListener(this);
        btTest2.setOnClickListener(this);

meinDatum.setText(datum);

aber das ist Ansichtssache , man könnte auch Methoden dafür schreiben welche die Vorgänge dann erledigen, und einfach diese Methoden dann im onCreate nach der reihe aufrufen .
 
Zuletzt bearbeitet:

Hannah

Mitglied
es geht jetzt fast

jetzt tritt aber das Problem auf
das er beim 1ten Klick die Zeit korrekt übergibt
aber beim 2 ten Klick tut sich nichts mehr !
return bleibt ja immer der gleiche Wert oder wie seh ich das?
Java:
 public double ZeitDifferenzBerechnen(){
	        
	       double ergebnis;
	        
	String[] splitted = EingabeStartZeit.getText().toString().split(":");
	long startHours = Long.parseLong(splitted[0]) * (1000 * 60 * 60); //Stunden
	long startMinutes = Long.parseLong(splitted[1]) * (1000 * 60); //Minuten
	long startSeconds = Long.parseLong(splitted[2]) * 1000; //Sekunden
	long startMillis = startHours + startMinutes + startSeconds; //Millisekunden
	    
	//AnzeigeZeitStunden.setText(f.format(endTime - startMillis));
	 ergebnis = endTime - startMillis;
	 AnzeigeZeitStunden.setText(f.format(ergebnis));
	        return ergebnis;

Java:
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	      switch(v.getId()){
	      
	        case R.id.button1:
	        	ZeitDifferenzBerechnen();
	        	//String text1 ="Button1 geklickt";
	    		//Toast einToast1 = Toast.makeText(v.getContext(), text1, Toast.LENGTH_SHORT);
	    		//einToast1.show();
	    break;
	        case R.id.button2:
	        	String text2 = Datum;
	    		Toast einToast2 = Toast.makeText(v.getContext(),text2, Toast.LENGTH_SHORT);
	    		einToast2.show();
	    break;
	    }		
	}	
 }
 

kaoZ

Top Contributor
es geht jetzt fast

jetzt tritt aber das Problem auf
das er beim 1ten Klick die Zeit korrekt übergibt
aber beim 2 ten Klick tut sich nichts mehr !
return bleibt ja immer der gleiche Wert oder wie seh ich das?
Java:
 public double ZeitDifferenzBerechnen(){
	        
	       double ergebnis = 0; // hier initialisieren !
	        
	String[] splitted = EingabeStartZeit.getText().toString().split(":");
	long startHours = Long.parseLong(splitted[0]) * (1000 * 60 * 60); //Stunden
	long startMinutes = Long.parseLong(splitted[1]) * (1000 * 60); //Minuten
	long startSeconds = Long.parseLong(splitted[2]) * 1000; //Sekunden
	long startMillis = startHours + startMinutes + startSeconds; //Millisekunden
	    
	//AnzeigeZeitStunden.setText(f.format(endTime - startMillis));
	 ergebnis = endTime - startMillis;
	 AnzeigeZeitStunden.setText(f.format(ergebnis)); // das kannst du beim buttonklick machen
	        return ergebnis;

Java:
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	      switch(v.getId()){
	      
	        case R.id.button1:
	        	AnzeigeZeitStunden.setText(f.format(ZeitDifferenzBerechnen())); // Methoden schreibt man auch klein ;)
	    break;
	        case R.id.button2:
	        	String text2 = Datum;
	    		Toast einToast2 = Toast.makeText(v.getContext(),text2, Toast.LENGTH_SHORT);
	    		einToast2.show();
	    break;
	    }		
	}	
 }


Was soll den beim 2ten klick passieren ? auf den gleichen button ? oder button 2 ?

[EDIT]return, bedeutet in dem Fall das dir die Methode einen Wert zurückgibt, in deinem fall einen Wert vom primitiven Datentyp double [/EDIT]

Du kannst also diese Methode überall dort einsetzen , wo ein double als Wert erwartet wird

z.B

Java:
myEditText.setText(String.valueOf(MeineMethodeGibtMirEinDoubleZurück());

das EditText erwartet einen String also verpacken wir mit
Code:
String.valueOf()
unsere Methode welche uns ein double zurückliefert, und lassen so unseren wert als String ausgeben.
 
Zuletzt bearbeitet:

Hannah

Mitglied
hallo,

ja < auf den gleichen Button

das Ergebnis ist/kann doch nicht immer gleich sein .

Java:
ergebnis = endTime - startMillis;

dieser Wert wird doch immer größer logischerweise
zb. 1.Klick 2:30:30 2.Klick 5 Sekunden später muss 2:30:35 ergeben
 

kaoZ

Top Contributor
hallo,

ja < auf den gleichen Button

das Ergebnis ist/kann doch nicht immer gleich sein .

Java:
ergebnis = endTime - startMillis;

dieser Wert wird doch immer größer logischerweise
zb. 1.Klick 2:30:30 2.Klick 5 Sekunden später muss 2:30:35 ergeben

nein, da er in der Methode die dein Buttonklick ausführt ja immer die Werte aus den Textfeldern ausliest und endTime bzw startMillis zuweist, wenn da immer die gleichen werte drinne stehen bleibt dann auch logischerweise das Ergebnis gleich

dann müsstest du eine Liste erstellen in der du dann das aktuelle ergebnis speicherst und jedes neue ergebnis dazu addierst oder subtrahierst;

Java:
ArrayList<Double> ergebnisListe = new ArrayList<Double>();

ergebnisListe.add(ergebnis);

und so könntest du die werte dann zusammenrechnen

Java:
double endErgebnis;

for(double i : ergebnisListe){

   endErgebnis += i;
}
// und dann halt 

deinEditText.setText(String.valueOf(endErgebnis));


[EDIT]Eine ähnliche App habe ich mal für mein Tattoowierer entworfen , damit kann man die Start/EndZeit der Sitzung, Pausenzeiten und den Stundenlohn ermitteln [/EDIT]


Wichtig ist das du die Werte bei jedem Klick in eine Liste speicherst, und vor der Ausgabe in dein Textfeld alle werte zusammenrechnest, wie oben beschrieben ;)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
F Aktuelle Stunde, Minute usw. auslesen Java Basics - Anfänger-Themen 10
D Erste Schritte Einsteigerfrage - Überblick über aktuelle Java-Technologien Java Basics - Anfänger-Themen 6
J FileOutputStream aktuelle Speicher Pfad ausgeben Java Basics - Anfänger-Themen 13
N aktuelle Datum Mikrosekunden genau bestimmen Java Basics - Anfänger-Themen 8
RySa Input/Output aktuelle größe des BufferedWriters ? Java Basics - Anfänger-Themen 5
M LinkedList aktuelle position Java Basics - Anfänger-Themen 3
D JEditorPane aktuelle Zeile auslesen Java Basics - Anfänger-Themen 4
A Aktuelle Parameter Java Basics - Anfänger-Themen 4
B aktuelle Position einer JTextArea ermitteln Java Basics - Anfänger-Themen 6
G TrayIcon: Wie aktuelle Position des Icons erhalten? Java Basics - Anfänger-Themen 2
S Aktuelle Zeile bekommen Java Basics - Anfänger-Themen 2
G Aktuelle Heap-Größe auslesen? Java Basics - Anfänger-Themen 3
T Aktuelle Datum Java Basics - Anfänger-Themen 4
M Datei ins aktuelle Verzeichnis speichern Java Basics - Anfänger-Themen 5
N ins aktuelle fenster schreiben. Java Basics - Anfänger-Themen 6
N Aktuelle Jahreszahl auslesen? Java Basics - Anfänger-Themen 3
R Woher bekomme ich das aktuelle Jahr oder auch Datum? Java Basics - Anfänger-Themen 4
B Türme von Hanoi: aktuelle Belegungszustände ausgeben? Java Basics - Anfänger-Themen 2
T aktuelle Position in einer Datei Java Basics - Anfänger-Themen 4
R Aktuelle URL herausfinden Java Basics - Anfänger-Themen 5
T Datum und Uhrzeit Java Basics - Anfänger-Themen 4
S Uhrzeit Rechnung Java Basics - Anfänger-Themen 8
A Frage zur Aufgabe Uhrzeit einstellen mit Objekten Java Basics - Anfänger-Themen 18
F Zeitspanne bis zur nächsten Uhrzeit Java Basics - Anfänger-Themen 7
OlafHD Java Uhrzeit aktualisiert sich nicht Java Basics - Anfänger-Themen 2
A veränderliche Uhrzeit einmalig speichern Java Basics - Anfänger-Themen 3
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
I Java Uhrzeit Java Basics - Anfänger-Themen 2
2 Uhrzeit und Datum aktualisieren Java Basics - Anfänger-Themen 12
M Datum in Millisekunden allerdings ohne Uhrzeit Java Basics - Anfänger-Themen 4
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
H Erste Schritte Sekunden in Uhrzeit Java Basics - Anfänger-Themen 7
H Erste Schritte Uhrzeit anzeigen in Minuten Dezimal Java Basics - Anfänger-Themen 8
D currentTimeMillis Uhrzeit Java Basics - Anfänger-Themen 8
K Datum und Uhrzeit als Date Objekt Java Basics - Anfänger-Themen 10
Blindxantos Datentypen Uhrzeit in einem Attribut speichern Java Basics - Anfänger-Themen 3
G Uhrzeit als String in Integer (HH:MM:SS) Java Basics - Anfänger-Themen 5
B Von Uhrzeit 5 min abziehen Java Basics - Anfänger-Themen 5
B Uhrzeit vom Benutzer eingeben lassen. Java Basics - Anfänger-Themen 5
E Datum und Uhrzeit von UTC in MET umrechnen Java Basics - Anfänger-Themen 6
E Methoden Datum , Uhrzeit, Nachricht in txt Datei schreiben Java Basics - Anfänger-Themen 3
S Millisekunden in Datum/Uhrzeit wandeln Java Basics - Anfänger-Themen 11
S Rechnen mit Datum bzw. Uhrzeit Java Basics - Anfänger-Themen 3
P double in Uhrzeit umwandeln Java Basics - Anfänger-Themen 10
D Meldung zu bestimmter Uhrzeit Java Basics - Anfänger-Themen 9
F Uhrzeit von Webseite Java Basics - Anfänger-Themen 7
K String.matches Uhrzeit Java Basics - Anfänger-Themen 2
M mit Uhrzeit rechnen Java Basics - Anfänger-Themen 11
G Date von heute mit Uhrzeit erzeugen Java Basics - Anfänger-Themen 9
R Uhrzeit in JFrame anzeigen Java Basics - Anfänger-Themen 12
B XML? Für Uhrzeit und Datum für mein HP? Java Basics - Anfänger-Themen 6
L Dateiname mit Uhrzeit Java Basics - Anfänger-Themen 26
A Uhrzeit und Datum Java Basics - Anfänger-Themen 10
J uhrzeit programmieren Java Basics - Anfänger-Themen 5
C Anzahl der Sekunden aus Uhrzeit extrahieren Java Basics - Anfänger-Themen 6
P Uhrzeit für die Klasse Minute umwandeln. Java Basics - Anfänger-Themen 3
G Datum / Uhrzeit? Java Basics - Anfänger-Themen 3
G Uhrzeit hh:mm:ss in minuten umrechnen Java Basics - Anfänger-Themen 4
G problem mit uhrzeit Java Basics - Anfänger-Themen 8
D Probleme mit dem Datum / Uhrzeit Java Basics - Anfänger-Themen 3
T Uhrzeit und Zeitzone? Java Basics - Anfänger-Themen 3
C Uhrzeit auslesen Java Basics - Anfänger-Themen 6
S long millisekunden nach Uhrzeit format Java Basics - Anfänger-Themen 5
O uhrzeit mit einander vergleichen Java Basics - Anfänger-Themen 10
G Datum und Uhrzeit in einem String suchen und ausgeben Java Basics - Anfänger-Themen 2
M Uhrzeit Variable aus TimeTask in jTextField anzeigen Java Basics - Anfänger-Themen 4
P JOptionPane bei bestimmter Uhrzeit anzeigen Java Basics - Anfänger-Themen 2
T Event zu bestimmter Uhrzeit auslösen ? Java Basics - Anfänger-Themen 5
G Auf eine Uhrzeit xx Minuten addieren u. mit Akt. Zeit vergl. Java Basics - Anfänger-Themen 5
V Uhrzeit Java Basics - Anfänger-Themen 8
H Uhrzeit wird nicht aktualisiert Java Basics - Anfänger-Themen 15
K Datum und Uhrzeit erfragen Java Basics - Anfänger-Themen 3
G Datum und Uhrzeit in Sekunden konvertiern Java Basics - Anfänger-Themen 4
C aus string-file uhrzeit auslesen?? Java Basics - Anfänger-Themen 4
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben