Java Android Programmablauf durcheinander

xlShortylx

Cadet 4th Year
Registriert
Sep. 2012
Beiträge
103
Hallo,

mir ist es jetzt schon 1-2 Mal passiert, dass meine App die If-Else Anweisung falsch durchläuft.
Einmal bin ich im Debugger in den If- und danach in den Else-Zweig gelaufen, jetzt komme ich, nachdem die Bedingung geprüft wird, in den Else-Zweig einer ganz anderen If-Abfrage am Schluss der Methode.
Hat jemand eine Ahnung an was das liegen könnte? Es passiert im Debugger aber auch ohne Debugger.

Gruß
xlShortylx
 
Also ohne Code kann man dir hier nicht wirklich weiterhelfen, tut mir leid.
 
Um die Frage beantworten zu können bräuchte man den Code nicht aber dann poste ich ihn später wenn ich am Rechner bin.
 
Meistens ist der Fehler dem Monitor zu suchen, daher, nein die Frage kann man zu 95% nicht ohne weiteres ohne den Code beantworten
 
xlShortylx schrieb:
Um die Frage beantworten zu können bräuchte man den Code nicht aber dann poste ich ihn später wenn ich am Rechner bin.

bitte was?!?!?!?! oder ja, du hast recht.

DU HAST DA NEN FEHLER IM CODE ODER GEDANKENGANG.

Null Code gebraucht zum beantworten :)
 
ohne code einen fehler zu finden... klar, kein Problem ;)

aber wenn du schon schreibst, dass du nach einem Else-Zweig in einer ganz anderen if abfrage landest... dann klingt das schon ziemlich nach schlecht verschachtelten if-else-statements. mach es mit switch-case und gut ist.. oder auch nicht: denn wir kennen deinen code und deinen Wunsch nicht :D
 
Hi, ihr habt schon Recht, war nur grad nicht am Arbeitslaptop und hab mir gedacht ich frag trotzdem mal.

Hier der Code:

Code:
public boolean Add(String path)
	{
		if (convertedFiles.contains(path))      // Hier springt er in den Else-Zweig ganz unten in der Methode
		{
			return false;
		}
		
		File xaxoaFile = new File(path);
		
		String imgPath = xaxoaFile.getParent();	
		
                String filenameArray[] = xaxoaFile.getName().split("\\.");
                String filenameWOExtention = filenameArray[0];
		
		imgPath += "/"+ filenameWOExtention + ".jpg";

		if (new File(imgPath).exists() == false)
		{
			imgPath = null;
			Log.d("file not found", "following file can not be found: " + imgPath);
		}
		
		if(DBwriter.addToDB(xaxoaFile.getAbsolutePath(), imgPath)) {
			//Toast.makeText(context, "File has been added!", Toast.LENGTH_SHORT).show();
			convertedFiles.add(path);
			return true;
		}
		else {
			return false;
		}
	}
 
xlShortylx schrieb:
Hi, ihr habt schon Recht, war nur grad nicht am Arbeitslaptop und hab mir gedacht ich frag trotzdem mal.

Hier der Code:

Code:
public boolean Add(String path)
	{
		if (convertedFiles.contains(path))      // Hier springt er in den Else-Zweig ganz unten in der Methode
		{
			return false;
		}
		
		File xaxoaFile = new File(path);
		
		String imgPath = xaxoaFile.getParent();	
		
                String filenameArray[] = xaxoaFile.getName().split("\\.");
                String filenameWOExtention = filenameArray[0];
		
		imgPath += "/"+ filenameWOExtention + ".jpg";

		if (new File(imgPath).exists() == false)
		{
			imgPath = null;
			Log.d("file not found", "following file can not be found: " + imgPath);
		}
		
		if(DBwriter.addToDB(xaxoaFile.getAbsolutePath(), imgPath)) {
			//Toast.makeText(context, "File has been added!", Toast.LENGTH_SHORT).show();
			convertedFiles.add(path);
			return true;
		}
		else {
			return false;
		}
	}

Sieht nicht kompliziert aus, hast du schonmal ein "clean" im Projekt gemacht und komplett neudeployed? Vielleicht verwendet er einen alten Stand. Kannst du einen Breakpoint in eine der Anweisung in der Mitte machen?
 
Wieso hast du ganz unten überhaupt ein else? Das könnte man auch weglassen. Wäre interessant zu wissen, was er macht, wenn du das else unten weglässt.
 
Das sollte er nicht weglassen können, Eclipse müsste da direkt schon meckern - schließlich würde er sonst ja ggf. keinen Wert, also quasi "void" zurückgeben.
 
Wenn er das else weglässt und einfach so false zurückgibt, kommt er glimpflich (und datentypkonform) aus der Sache raus. ;)

Hast du es schon mit printf- bzw. sysout-Debugging versucht? Klappt immer. :) Computer springen nicht mal eben im Code umher, außer dein Target ist nicht ganz clean. Oder du hast Nebenläufigkeitsabfuck und es sieht für dich wie Sprünge aus.
 
Zuletzt bearbeitet:
einfach "Else" weglassen und ganz dezent am Ende "Return false" rein klatschen...
 
CryNickSystems schrieb:
Das sollte er nicht weglassen können, Eclipse müsste da direkt schon meckern - schließlich würde er sonst ja ggf. keinen Wert, also quasi "void" zurückgeben.
Doch, klar kann er das weglassen. Ob du nun
Code:
else { 
    return false;
}
oder einfach nur
Code:
return false;
hast, ist in dem Fall völlig egal. In jedem Fall wird etwas zurückgegeben (eben true, wenn er in den if-Zweig oben reingeht, oder false, wenn nicht).
 
Ah. Mein Fehler, habe dich falsch verstanden.

Dachte, du meintest, den gesamten Else-Block wegzulassen - das meinte ich mit "geht nicht".

Na klar kann er einfach ein "return false" am Ende machen (macht man i.d.R. auch).
 
Habe den Code nicht genau durchgesehen, aber allgeimein zu dem Thema:

Unbedingt überprüfen, was wirklich an den Aufrufer zurückgegeben wird.
Beim Debuggen von Android Apps mit mehreren Return Statements kann es vorkommen, dass der Debugger zwischen den returns springt, siehe auch:
http://stackoverflow.com/questions/21805868/android-studio-debugger-highlights-the-wrong-lines
Eventuell funktioniert dein Code korrekt (oder es ist noch ein anderer Fehler drin), aber der Debugger zeigt den Ablauf nicht optimal an.
 
Zurück
Oben