Android ConcurrentModificationException während einer for Schleife

Robat

Top Contributor
Hallo liebe Java-Forum-Communitiy,

als erstes möchte ich mich für eventuelle Fehler entschuldigen. Dies ist mein erster Beitrag in einem Forum.

Nun zu meinem Problem. Ich bin momentan dabei eine App zuprogrammieren, die mehrere .xml Dateien von unserem Schulserver ausliest. Nach dem ich die xml Dateien geparsed habe und ein bisschen aufgesplittet habe (in Head, Action und Footer) schreibe ich die verschiedenen Elemente in eine ArrayList (für jeden Type [also Head, Action und Footer] eine seperate). Nun möchte ich das alles in einer Datei speichern. Dazu habe ich mir eine eigene Methode geschrieben in der ich jede der einzelnen Listen durchlaufen lassen mittels einem Iterator. Ich bekomme leider dennoch immer wieder eine ConcurrentModificationException. Meine Methode sieht so aus:

Java:
public void writeDataIntoFile(String filename, Context context) {
	try {
		outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
			
		synchronized (Head.allHeads) {
			for ( Iterator<Head> iterHead = Head.allHeads.iterator(); iterHead.hasNext(); ) {
				        Head head = iterHead.next();
					outputStream.write(head.toData().getBytes("ISO-8859-1"));
				}
				
				outputStream.write(("\n" + "Action").getBytes("ISO-8859-1"));
				
			}
			
			
//			for (Head a : Head.allHeads) {
//				outputStream.write(a.toData().getBytes("ISO-8859-1"));
//			}

		synchronized (Action.allActions) {
		for ( Iterator<Action> iterAction = Action.allActions.iterator(); iterAction.hasNext(); ) {
			Action action = iterAction.next();
			outputStream.write(action.toData().getBytes("ISO-8859-1"));				
			}
			   outputStream.write(("\n" + "FooterInfo").getBytes("ISO-8859-1"));
				
			}
			
//			for (Action a : Action.allActions) {
//				outputStream.write(a.toData().getBytes("ISO-8859-1"));
//			}
			
		synchronized (Footer.allFooters) {
		for ( Iterator<Footer> iterFooter = Footer.allFooters.iterator(); iterFooter.hasNext(); ) {
					Footer footer = iterFooter.next();
					outputStream.write(footer.toData().getBytes("ISO-8859-1"));
				}
			}
			
//			for (Footer f : Footer.allFooters) {
//				outputStream.write(footer.toData().getBytes("ISO-8859-1"));
//			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			XMLHandler.reset();
			if (outputStream != null) {
				try {
					outputStream.flush();
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

Die auskommentierten Zeilen sind meine Vorherigen versuche. Ich habe auch schon versucht einen snychronized Block drauszumachen, da ich dies auf diversen Seiten gelesen habe. Aber es bringt leider alles nichts. Hier ist noch der LogCatoutput:

Java:
08-08 00:43:36.028: E/AndroidRuntime(20330): FATAL EXCEPTION: main
08-08 00:43:36.028: E/AndroidRuntime(20330): Process: com.roberthein.mobilev, PID: 20330
08-08 00:43:36.028: E/AndroidRuntime(20330): java.util.ConcurrentModificationException
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at com.roberthein.mobilev.helperclasses.Manager.writeDataIntoFile(Manager.java:94)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at com.roberthein.mobilev.parser.MyXmlParserFactory.onPostExecute(MyXmlParserFactory.java:113)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at com.roberthein.mobilev.parser.MyXmlParserFactory.onPostExecute(MyXmlParserFactory.java:1)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at android.os.AsyncTask.finish(AsyncTask.java:632)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at android.os.Handler.dispatchMessage(Handler.java:102)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at android.os.Looper.loop(Looper.java:212)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at android.app.ActivityThread.main(ActivityThread.java:5135)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at java.lang.reflect.Method.invokeNative(Native Method)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at java.lang.reflect.Method.invoke(Method.java:515)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
08-08 00:43:36.028: E/AndroidRuntime(20330): 	at dalvik.system.NativeStart.main(Native Method)

Ich danke euch im vorraus schon mal für eure Hilfe.
Grüße Robat
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

Java:
20330): java.util.ConcurrentModificationException08-08 00:43:36.028: E/AndroidRuntime(20330):
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
Hier tritt der Fehler - allerdings ist bei Deinem Post nicht ersichtlich, welches die Zeile 573 ist !!

Auf jeden scheinst Du einen Iterator unzulässig zu verändern ....

Gruß
Klaus
 
Zuletzt bearbeitet:

Robat

Top Contributor
Hallo VfL_Freak und Danke für deine schnelle Antwort.

Ich habe meinen Code noch mal durchgeschaut und festgestellt das ich keine Zeile 573 habe. Soweit ich das kenne, sagt diese Zeile doch auch nur an welcher Stelle in der ArrayList.java die Exception geworfen wurde, oder?

Hast du oder jemand anders vielleicht noch einen Rat oder Tipp woran das liegt, das die Exception trotzdem geworfen wird?

Wie immer schon einmal Danke im vorraus
Grüße Robat
 

VfL_Freak

Top Contributor
Moin,

sorry, das scheint beim Paste&Copy was schief gelaufen zu sein, da die danach folgende Zeile fehlte :shock:

Dies hier die die gesuchte Stelle:
Java:
at com.roberthein.mobilev.helperclasses.Manager.writeDataIntoFile(Manager.java:94)

Generell: Du musst imStackTrace immer die erste Zeile suchen, in der eine von Deinen Codes/Codenamen auftritt. Das ist dann die relevante Stelle, an der die Exception geworden wird!
In diesem Fall wurde sie zwar endgültig Java-Klasse "ArrayList" geworfen (vor der Du i. d. R. keinen Codeverweis hast), aber der Auslöser in Deinem Code ist halt "Manager.java:94" !!

Gruß
Klaus
 

Robat

Top Contributor
Hey,

gut also die Zeile 94 sieht so aus:

Java:
synchronized (Action.allActions) {
	for ( Iterator<Action> iterAction = Action.allActions.iterator(); iterAction.hasNext(); ) {
		Action action = iterAction.next();
		outputStream.write(action.toData().getBytes("ISO-8859-1"));				
	}

(Im code ist die letzte Klammer Zeile 94, deswegen dachte ich mir ich schick dir mal den ganzen Block ;) )


Und danke für den Tipp, den werde ich mir merken!
 

VfL_Freak

Top Contributor
Moin,

ok, es wird dan auch der gesamte Block sein, da Du hier zu sehr am Iterator rumbastelst :bae:

Java:
synchronized (Action.allActions) 
{
	for ( Iterator<Action> iterAction = Action.allActions.iterator(); iterAction.hasNext(); ) 
        {
		Action action = iterAction.next();
		outputStream.write(action.toData().getBytes("ISO-8859-1"));				
	}
Ich kenne die Klasse "Action" (und speziell das "allActions") jetzt zwar nicht nicht, aber versuch' mal die Variable, auf die Du mit dem "next()" schreibst, anders zu benennen!
Java:
synchronized (Action.allActions) 
{
    for ( Iterator<Action> iterAction = Action.allActions.iterator(); iterAction.hasNext(); ) 
    {
        Action TEMP = iterAction.next();
        outputStream.write(TEMP.toData().getBytes("ISO-8859-1"));				
    }
}

Gruß
Klaus
 

Robat

Top Contributor
Also danke erstmal für die Antworten.

@Joos: also mit multithreading habe ich mich noch nicht beschäftigt und ich habe meines Wissens nichts der gleichen dort eingebaut (nur um die XML Dateien zu parsen habe ich ein Asynctask benutzt). Ich wüsste jetzt nicht das die Listen zeitgleich irgendwo geändert werden.

@Vfl_Freak: Die Klasse Action definiert einfach nur wie eine Action aus der XML aufgebaut ist. Also das dieses Objekt eine "klasse", "Stunde", "fach" etc hat. Wenn ich die XML Dateien parsen mache ich ein neues Action Objekt wo ich dann alle Daten eintrage. Dieses Objekt add ich dann zu der Allactions List. Sprich in der Allactions List sind dann mehrere action-objecte. Die variable zu Ändern versuch ich wenn ich zu hause bin. Mich würde mal interessieren wieso Java so ein Problem in der Hinsicht hat.

Grüße
Robat
 

Joose

Top Contributor
@Joos: also mit multithreading habe ich mich noch nicht beschäftigt und ich habe meines Wissens nichts der gleichen dort eingebaut (nur um die XML Dateien zu parsen habe ich ein Asynctask benutzt). Ich wüsste jetzt nicht das die Listen zeitgleich irgendwo geändert werden.

Asynctask ist ja schon mal ein Hinweis.
Kann es sein das noch eine XML Datei ausgelesen wird während du schon versuchst die Ergebnisse in die Datei zu schreiben? Damit würde sich die Liste ändern wärhend dein Iterator drübergeht!

Lass dir bei jedem Schleifendurchlauf (bei der writeDataToFile Methode) die Größe der Liste ausgeben (bevor du "next()" aufrufst).
So kannst du es einfach kontrollieren ob sie diese ändert

@Vfl_Freak: Die Klasse Action definiert einfach nur wie eine Action aus der XML aufgebaut ist. Also das dieses Objekt eine "klasse", "Stunde", "fach" etc hat. Wenn ich die XML Dateien parsen mache ich ein neues Action Objekt wo ich dann alle Daten eintrage. Dieses Objekt add ich dann zu der Allactions List. Sprich in der Allactions List sind dann mehrere action-objecte. Die variable zu Ändern versuch ich wenn ich zu hause bin. Mich würde mal interessieren wieso Java so ein Problem in der Hinsicht hat.

Mich würde es sehr wundern wenn Java mit dem Namen einer Variable ein Problem zur Laufzeit hat.
Es sollte eigentlich egal sein wie diese heißt.

Ob mein Vorschlag das Problem wirklich löst, kann ich dir so nicht sagen ... auf jeden Fall darfst Du wohlö den Iterator innerhalb der Schleife nicht ändern!

Wie oben schon gesagt ist der Name einer Variable egal. Daher glaub ich nicht dass das Problem dadurch gelöst wird.

Den Iterator darf man innerhalb einer Schleife ändern! Das ist der Vorteil und Sinn eines Iterators ;)
Listen dürfen in ihrer Länge nicht geändert werden wenn man sie per Schleife durchgeht, will man nun Elemente entfernen muss man dafür einen Iterator verwenden. Von diesem kann man dann die Elemente ohne Probleme entfernen.
Währen man aber den Iterator durchgeht, darf die zugrunde liegende Liste sich trotzdem nicht ändern (nur vom Iterator)
 
Zuletzt bearbeitet:

Robat

Top Contributor
Hallo,

also ich habe mir eure Vorschläge mal angeschaut. Wie Joose schon sagte klappt das mit dem ändern des Variablennamens leider nicht. [danke trotzdem für deine mühe!]

Nun zu deinem Rat Joose:

Ich habe mir bei jeden Durchlauf die Länge anzeigen lassen und die längte bleibt immer gleich. Allerdings ist mir etwas anderes aufgefallen. Auf dem Server liegen 5 Dateien [für jeden Wochentag eine]. Bei der ersten Datei Montag läuft alles gut. Bei Dienstag wird mir dann aber schon 2 mal der Log den Head für diesen Block ausgegeben[obwohl es nur einer sein dürfte]:
Java:
synchronized (Head.allHeads) {
	for ( Iterator<Head> iterHead = Head.allHeads.iterator(); iterHead.hasNext(); ) {
		Log.d("IteratorHeadLength:" + " [" + filename + "]",         String.valueOf(Head.allHeads.size()));
		Head head = iterHead.next();
		outputStream.write(head.toData().getBytes("ISO-8859-1"));
	}		
	outputStream.write(("\n" + "Action").getBytes("ISO-8859-1"));			
}

Wenn er dann bei Mittwoch ist passiert das selbe, allerdings nimmt er komischerweise nicht die Daten aus dem Head von Mittwoch sondern er schreibt die Daten vom Tag Donnerstag in die TextView. Demnach ist er wahrscheinlich irgendwo zulangsam bzw zuschnell oder?

Grüße Robat
 

Joose

Top Contributor
Ja das klingt nicht sehr gewollt dieses durcheinander ;)
Es dürfte einfach nicht richtig synchronisiert sein, das würde auch die Exception erklären


Jetzt wären nähere Infos zum Auslesen praktisch.
Wieviele Dateien liest du nun gleichzeitig aus? Wie liest du sie aus (Code)?
Wie ist eine Datei aufgebaut? Was fügst du dann in welche Liste?
Wann soll dann was rausgeschrieben werden?
 
Zuletzt bearbeitet:

Robat

Top Contributor
Nein, das ist wirklich nicht gewollt :)

Also das ganze ist so aufgebaut:

1# Es wird auf ein MenuItem in der ActionBar gedrückt und und dann wird eine ForSchleife durchlaufen. In der wird die AsyncTaskActivity executed mit der gewünschten url als paramter. weekDays ist ein Array das die Wochentage enthält und als 2 paramter übergeben wird.

Java:
} else if(item.getTitle().equals("Herunterladen")) {
	for (int i = 0; i < weekDays.length; i++) {
		new MyXmlParserFactory(this, getApplicationContext())
		.execute("http://www.gymnasium-schkeuditz-haus-markranstaedt.de/data/"
		+ "schedule/pupils/VertretungsplanSchueler" + weekDays[i] + ".xml", weekDays[i]);
}

2# in der doInBackground Methode wird mittels der SaxParserFactory ein SaxParser instanziert und der setContentHandler wird gesetzt. Der Handler ist ein eigens geschriebener.

Java:
@Override
protected String doInBackground(String... params) {
	try {
			
		// initialize the url given as paramter
		URL url = new URL(params[0]);
			
		// make an instance of SAXParserFactory
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
			
		// make an instance of the SAXParser
		SAXParser saxParser = saxParserFactory.newSAXParser();
			
		// make an instance of the XMLReader
		XMLReader xmlReader = saxParser.getXMLReader();
			
		// make an instance of our XMLHandler
		XMLHandler xmlHandler = new XMLHandler();
			
		// set the ContentHandler to our xmlReader
		xmlReader.setContentHandler(xmlHandler);

		// make a new InputSource
		InputSource source = new InputSource(url.openStream());
			
		// set the Encodingtype to UTF-8
		source.setEncoding("ISO-8859-1");
			
		// set the InputStream to parse the data
		xmlReader.parse(source);
			
	} catch (ParserConfigurationException e) {
		Log.e("SAX XML", "parse error", e);
	} catch (IOException e) {
		e.printStackTrace();
	} catch (SAXException e) {
		e.printStackTrace();
	}
	return params[1];
}

In dem Handler prüfe ich dann jedes Tag aus der XML Datei. Je nach Tag initialisiere ich dann ein neues Action, Head oder Footer Tag, setzte verschiedene Attr oder add das Object zur ArrayList.

Java:
@Override
public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		
        /******* HEAD *******/
	// in case its the tag for the head
	} else if (localName.equals(TAG_HEAD)) {
			
	        // make a new instance of the head class
		head = new Head();
        }  // Code ist an der Stelle gekürzt, aber ich denke man versteht was ich meine
			
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
		
	// in case its the tag for the title
	if (localName.equals(TAG_TITLE)) {

		// set the title to the currentValue
		head.setTitle(currentValue);
 
	// in case its the tag for the head
	} else if (localName.equals(TAG_HEAD)) {
			
		// add the current Action to the allHeads list
		Head.allHeads.add(head);

}// auch an der stelle ist der Code gekürzt

Es gibt 3 Klassen [Head, Action, Footer]. In jeder der Klassen sind die Attr definiert, mit Getter und Setter und der ArrayList
BSP:
Java:
/*************
	 * Variables *
	 ************/
	private String title;
	private String date;
	private String missTeachers;
	private String missClasses;
	private String changesTeachers;
	private String changesClasses;
	
	public static ArrayList<Head> allHeads = new ArrayList<Head>();
	
	
	public String getTitle() {
		return title;
	}
	
	public void setTitle(String title) {
		this.title = title;
	}
	
	public String getDate() {
		return date;
	}
	
	public void setDate(String date) {
		this.date = date;
	}
	
	public String getMissTeachers() {
		return missTeachers;
	}
	
	public void setMissTeachers(String missTeachers) {
		this.missTeachers = missTeachers;
	}
	
	public String getMissClasses() {
		return missClasses;
	}
	
	public void setMissClasses(String missClasses) {
		this.missClasses = missClasses;
	}
	
	public String getChangesTeachers() {
		return changesTeachers;
	}
	
	public void setChangesTeachers(String changesTeachers) {
		this.changesTeachers = changesTeachers;
	}
	
	public String getChangesClasses() {
		return changesClasses;
	}
	
	public void setChangesClasses(String changesClasses) {
		this.changesClasses = changesClasses;
	}
	
	public String toData() {
		return "Titel: " + this.title + " \n\nDatum: " + this.date + " \n\nFehlende Lehrer:\n" + this.missTeachers +
			   " \n\nFehlende Klassen:\n" + this.missClasses + " \n\nÄnderungen Lehrer:\n" + this.changesTeachers + 
			   " \n\nÄnderungen Klassen:\n" + this.changesClasses;
	}

3# in der PostExceute Methode wird dann mittels einer instance des Managers [die Klasse wo die methode writeDataIntoFile ist] die methode writeDataIntoFile aufgerufen. Dann sollte i. d. R. die Datei geschrieben werden. Aber das klappt ja leider nicht.

So ich hoffe ich konnte dir nun alle Schritte aufzeigen. Sollte ich dennoch etwas vergessen haben reiche ich es natürlich gerne nach.

Grüßte Robat
 

Joose

Top Contributor
1# Es wird auf ein MenuItem in der ActionBar gedrückt und und dann wird eine ForSchleife durchlaufen. In der wird die AsyncTaskActivity executed mit der gewünschten url als paramter. weekDays ist ein Array das die Wochentage enthält und als 2 paramter übergeben wird.

Java:
} else if(item.getTitle().equals("Herunterladen")) {
	for (int i = 0; i < weekDays.length; i++) {
		new MyXmlParserFactory(this, getApplicationContext())
		.execute("http://www.gymnasium-schkeuditz-haus-markranstaedt.de/data/"
		+ "schedule/pupils/VertretungsplanSchueler" + weekDays[i] + ".xml", weekDays[i]);
}

.......

3# in der PostExceute Methode wird dann mittels einer instance des Managers [die Klasse wo die methode writeDataIntoFile ist] die methode writeDataIntoFile aufgerufen. Dann sollte i. d. R. die Datei geschrieben werden. Aber das klappt ja leider nicht.

Ich nehme an mit der PostExecute Methode bei #3 meinst du die
Code:
onPostExecute(String result)
Methode von der Klasse AsyncTask. Und MyXmlParserFactory ist erweitert diese Klasse AsyncTask.

Wenn ja dann is der Fehler eigentlich recht simpel zu erklären:
Für jeden Wochentag startest du einen AsyncTask. Alle lesen ihre XML Datei aus und fügen die geparsten Objekte in die Listen.
Jetzt kommt es aber dazu das eine deiner AsyncTask früher fertig ist als die anderen -> ergo dieser ruft schon "writeDataIntoFile" auf. Und während dem Schreiben ändern die anderen Tasks aber noch die Listen.
==> ConcurrentModificationException

Lösung:
Bei #1 nach der Schleife musst du warten bis alle Tasks fertig sind und dann dort (und nicht in "onPostExecute") rufst du dann "writeDataIntoFile" auf!
Wie du das mit dem Warten realisiert weiß ich nicht, dazu kenne ich mich zu wenig mit AsyncTask und Android aus
 
Zuletzt bearbeitet:

Robat

Top Contributor
Ok das klingt logisch. Also meinst du ich soll das unter die for schleife machen?

Java:
} else if(item.getTitle().equals("Herunterladen")) {
    for (int i = 0; i < weekDays.length; i++) {
        new MyXmlParserFactory(this, getApplicationContext())
        .execute("http://www.gymnasium-schkeuditz-haus-markranstaedt.de/data/"
        + "schedule/pupils/VertretungsplanSchueler" + weekDays[i] + ".xml", weekDays[i]);
}
//Hier hin
}

Noch eine Frage für das nötige Verständnis. Wenn ich auf den Button klicke und er in die for geht macht er denn erst 5mal die for und macht dann das danach oder macht er die for macht das danach und wiederholt das 5mal?

Aufjedenfall dank ich dir schon mal für deine Hilfe. Ich habe das Gefühl das es klappt :)
 

Joose

Top Contributor
Ok das klingt logisch. Also meinst du ich soll das unter die for schleife machen?

Java:
} else if(item.getTitle().equals("Herunterladen")) {
    for (int i = 0; i < weekDays.length; i++) {
        new MyXmlParserFactory(this, getApplicationContext())
        .execute("http://www.gymnasium-schkeuditz-haus-markranstaedt.de/data/"
        + "schedule/pupils/VertretungsplanSchueler" + weekDays[i] + ".xml", weekDays[i]);
}
//Hier hin
}

Genau dort hin muss du eine Prüfung bauen die schaut ob die X Tasks beendet sind und wenn ja dann rufst du "writeDataIntoFile" auf.

Noch eine Frage für das nötige Verständnis. Wenn ich auf den Button klicke und er in die for geht macht er denn erst 5mal die for und macht dann das danach oder macht er die for macht das danach und wiederholt das 5mal?

Also das ist ganz simples Java was du da gerade nachfragst, wenn sowas nicht sitzt sollte man die Grundlagen wiederholen:
Java:
for ( Zählvariable mit Anfangswert; Bedingung; Schrittweite) {
      // Anweisung, die wiederholt werden soll
}

Die Anweisungen in der for-Schleife werden sooft wiederholt wie angegeben.
In diesem Fall musst du beachten das die Anweisung in der for-Schleife aber nur aus dem Erstellen des AsyncTasks Objekt besteht und dem Aufruf von "execute".
Die Eigentliche Ausführung des Tasks Codes passiert dann natürlich in dessen Thread!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Screenshot während aktiver Kamera Android & Cross-Platform Mobile Apps 0
T Lesen / Schreiben einer Textdatei - SD-Karte Android & Cross-Platform Mobile Apps 42
OnDemand Allgemeine Fragen zu einer App Android & Cross-Platform Mobile Apps 4
I Foto mit einer bestimmten Auflösung aufnehmen und als Datei ablegen. Android & Cross-Platform Mobile Apps 5
Jose05 Wie kann man mit einer App Geld verdienen? Android & Cross-Platform Mobile Apps 6
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
M Activity einer anderen App mit result Android & Cross-Platform Mobile Apps 2
J Android Zugriff auf eine Datei, diese von einer anderen App erstellt wurde? Android & Cross-Platform Mobile Apps 11
Mo1234 Plattform in einer App. Bitte um Hilfe! Android & Cross-Platform Mobile Apps 8
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
P Android Wie bestimme ich den Dateinamen einer Bilddatei? Android & Cross-Platform Mobile Apps 11
B Falsche ausgabe einer Rechnung! Android & Cross-Platform Mobile Apps 8
M Android Dynamische SchriftGröße einer TextView Android & Cross-Platform Mobile Apps 3
J Android Suche in einer ListView Android & Cross-Platform Mobile Apps 3
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
B Android wie kann ich in einer xml nach bestimme item suchen (DOM) Android & Cross-Platform Mobile Apps 7
C Android Diese Art von Werbung in einer App? Android & Cross-Platform Mobile Apps 1
? ständig ändernden Inhalten in einer App Android & Cross-Platform Mobile Apps 2
R Android Eine Website-frame in einer App Android & Cross-Platform Mobile Apps 4
H Android Aufrufen von "setContentView" in einer anderen Klasse Android & Cross-Platform Mobile Apps 3
S Die Erstellung einer eigenen App,Kosten? Android & Cross-Platform Mobile Apps 1
M Android Speichern einer .txt Datei im InternalStorage Android & Cross-Platform Mobile Apps 2
B Fragen zum Speichern einer Datei auf dem Gerät? Android & Cross-Platform Mobile Apps 7
C Auf Play Store verlinken - Code in einer Extraklasse Android & Cross-Platform Mobile Apps 1
G Thread in einer Service erstellen Android & Cross-Platform Mobile Apps 0
B Android Spieler Steuerung auf einer Map mit Berge? Android & Cross-Platform Mobile Apps 7
M Android Quellcode einer Website Android & Cross-Platform Mobile Apps 7
K Löschen einer Tabelle bei PlayStore update Android & Cross-Platform Mobile Apps 2
H Veröffentlichung einer Bezahl-App Android & Cross-Platform Mobile Apps 5
D Android EditText und TextView haben unterschiedliche größen innerhalb einer TableRow Android & Cross-Platform Mobile Apps 18
M Umlaute im Quellcode einer Website richtig darstellen Android & Cross-Platform Mobile Apps 4
M Quellcode einer Website auslesen Android & Cross-Platform Mobile Apps 5
T Android platzsparende Codierung verschlüsselter Texte in einer URI Android & Cross-Platform Mobile Apps 8
S Android "Weiches wechseln" zwischen Views in einer Activity Android & Cross-Platform Mobile Apps 3
F Bei einer Android Java App, Objekte erstellen Android & Cross-Platform Mobile Apps 2
G eine Methode einer anderen Activity aufrufen Android & Cross-Platform Mobile Apps 9
G Einbinden einer Bibliothek's App Android & Cross-Platform Mobile Apps 2
G Daten von einer Activity zur nächsten übergeben Android & Cross-Platform Mobile Apps 6
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
A Kann nicht in TextView einer anderen Klasse schreiben - wieso? Android & Cross-Platform Mobile Apps 9
A Beenden einer 2ten Activity Android & Cross-Platform Mobile Apps 3
T Android Multiple SDK-Support in einer Apk Android & Cross-Platform Mobile Apps 5
R Android Unterschiedliche Versionen von Android in einer App Android & Cross-Platform Mobile Apps 7
D Mehrere Kopien von einer Form Android & Cross-Platform Mobile Apps 7
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5
S Problem mit Einbindung einer externer Bibliothek Android & Cross-Platform Mobile Apps 2
S Variable Anzahl von Bytes aus einer Datei lesen Android & Cross-Platform Mobile Apps 2
P Erstellen einer Jar-File Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben