# Problem mit arraylist und button



## koschernostra (21. Okt 2014)

Hallo alle zusammen,
ich habe folgendes Problem eine arrayliste:

```
final List <Integer> player1 = new ArrayList<Integer>();
```
und ein Button:

```
final Button btnhigh = (Button) findViewById(R.id.btn_high);
        btnhigh.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                player1.add( 1 );
            }});
```

Das ganze ist in einer onCreat methode :

```
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        twP1Attack = (TextView) findViewById(R.id.txv_p1attack);


        final List <Integer> player1 = new ArrayList<Integer>();
        
      
        Integer [] aiplayer1 = player1.toArray( new Integer[]{} );

     
        final String intString = aiplayer1.toString();
       
        twP1Attack.setText( intString );
        
       

        final Button btnhigh = (Button) findViewById(R.id.btn_high);
        btnhigh.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                player1.add( 1 );
       
            }});
...
```

Nun funktiniert die liste wenn ich einfach darunter ein player1.add... setze aber nicht wenn ich sie mit dem Button hinzufüge ?!


----------



## koschernostra (21. Okt 2014)

ich weiss doppeltpost aber ich finde die bearbeiten funktion nicht.
funktionieren ist der falsche begriff, ich meine der liste wird das  player1.add(1) hinzugefügt. wenn ich sie in den Button setze, also es soll erst bei buttonclick hinzugefügt werden, funkt. nicht. es passiert schlicht nix.


----------



## dzim (21. Okt 2014)

Verstehe die "Frage" nicht! Denn ich konnte kein ansatzweise verständliches grammatikalisches Konstrukt darin entdecken.
Kannst du es bitte so formulieren, dass man es auch versteht? Vollständige und in sich abgeschlossene Sätze wären von Vorteil... Dann helfe ich gern. Oder versuche es zumindest.


----------



## koschernostra (21. Okt 2014)

klar sry 
Also ich versuche einer Arraylist Werte hinzuzufügen. Dies soll durch Buttons erfolgen, also button_1 fügt einen Wert, button_2 einen anderen ect. hinzu. 
Nun passiert nix  . Es wird mir kein syntaxfehler oder so angezeigt.
Und wenn ich einfach unter:
  final List <Integer> player1 = new ArrayList<Integer>();
player1.add(1)
schreibe, fügt es der liste "1" hinzu, schreibe ich player.add(1). in den ClickListener des butoons passiert nix.
Nun möchte ich aber das der liste durch klick auf den jeweiligen button  ein Wert hinzugefügt wird.


----------



## dzim (21. Okt 2014)

Sorry, aber dein Schreibstil und deine Rechtschreibung ist wirklich so katastophal schlecht, dass es mir schwer fällt dir zu folgen!
Darüber hinaus: Wenn ich mir deine wirren Code-Schnipsel ansehe, werde ich auch daraus nicht schlau! Was erwartest du, wenn du der Liste "1" hinzufügst? Was soll laut deinem Code passieren? Deiner #onCreate-Methode nach kann ich dir sagen, was du in der GUI sehen wirst, wenn du auf den Knopf drückst: *NICHTS!*
Ich bin mir ob deines Codes und deiner Texte nicht sicher, was du eigentlich erwartest, aber ich denke, dass du hier massive Lücken hast, wie Objekt-Orientierte Programmierung mit Java überhaupt funktioniert. Dein Liste-zu-Array-zu-Text-Konstruckt (was in #onCreate schlicht nur ein einziges Mal beim erstellen der Activity/des Fragment aufgerufen wird) kann nie die GUI updaten. Also selbst wenn du ansatzweise Java kannst, kommt es mir so vor, als ob GUI-Programmierung allgemein und Android-GUIs im speziellen dir noch ein vollkommenes Rätsel sind.

Um das Ganze etwas abzukürzen: Schau dir mal ein paar Tutorials an!
Wenn du bereits einen gereiften Java Background haben solltest (was ich wie gesagt bezweifele, daher: Java Tutorials ), dann schau dir die von Lars Vogel an: Android Development
Und nichts kann dir eine fundiertes Selbststudium ersparen, also schau dich mal wirklich ernsthaft auf Android Developers um. Da finden sich derart viele Code-Schnipsel, wie man was entwickelt, dass man eigentlich fast schon komplette (einfache) Oberflächen anhand dieser erstellen könnte...


----------



## koschernostra (22. Okt 2014)

Ok, hast mir schonmal geholfen. Naja teils teils. Also ich habe einen grundliegenden java backgound, klar ist android ein neues gebiet für mich. Ich hab schon ein gut funktionierendes spiel entwickelt. Von daher sind mir eigentlich die grundliegenden sachen ein begriff.
Ich möchte ganz konkret, dass der spieler1 ein array mit 6 stellen und zahlen von 1 bis 3 füllen soll. Diese wird dann mit einem array eines anderne spieler abgeglichen. (bei gleicher zahl tuh dies, bei unterschiedlicher tuh das)
Es funktioniert alles bis eben die liste über buttons zu füllen.
Ich komm erst morgen wieder an mein computer, aber im grunde sollte ich die arraylist.add ect. in eine extra methode packen und diese durch buttons aufrufen?


----------



## koschernostra (22. Okt 2014)

Also hier nochmal der ganze code, ich weiss du sagst ich gehe das ganze vollkommen falsch an und sollte mich noch reinlesen, aber ich stehe echt auf dem schlauch.

```
package com.example.samuraytest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {
	 public TextView twP1Attack;
	 public TextView twtest;
	 public int iOne;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        addButton();
        
        //List <Integer> player2 = new ArrayList<Integer>();

      



    }

public void addButton(){
	
	twP1Attack = (TextView) findViewById(R.id.txv_p1attack);

    final List <Integer> player1 = new ArrayList<Integer>();

    final String intString = player1.toString();
   
    twP1Attack.setText( intString );
    
	  final Button btnhigh = (Button) findViewById(R.id.btn_high);
      btnhigh.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
              player1.add( 1 );
     
          }});
      
      final Button btnfront = (Button) findViewById(R.id.btn_front);
      btnfront.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
              player1.add( 2 );
             
          }});
      
      final Button btnlow = (Button) findViewById(R.id.btn_low);
      btnlow.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
              player1.add( 3 );
          
          }});
	
}


}
```


----------



## dzim (22. Okt 2014)

Du hast mir aber leider noch immer nicht verraten, was du eigentlich hoffst. Was soll deiner Meinung nach passieren?


```
final List <Integer> player1 = new ArrayList<Integer>();
final String intString = player1.toString();
```

Erstellt dir einmalig (beim Aufruf der Methode) eine Liste (die danach von nirgendwo anders in dieser Klasse verwendet werden kann). Macht daraus einen String (weiss jetzt nicht mehr, ob dann die Liste der Zahlen im Label erscheint oder nur die Repräsentation der Klasse (default-toString-Funktion); aber selbst wenn es das Erste ist, wäre es leer, da die Liste leer ist.

Eine normale Liste - und auch das TextView-Widget - bietet kein Databinding (egal ob uni- oder bidirektional), wie etwa JavaFX, daher wird eine Änderung an der Liste auch nichts bewirken. Und da deine Liste nur innerhalb der Methode #addButton() bekannt sind, wird auch niemans sonst jeh davon erfahren, wenn du #add(1|2|3) darauf aufrufst. 

Und genau diese Fehler haben mich schlussfolgern lassen, dass du noch ein Anfänger bist und noch einmal ein paar Tutorials anschauen solltest.


----------



## koschernostra (23. Okt 2014)

Also sollte ich mir vor allem tutorials für databinding anschauen? Íst sqlight und database zu viel des guten? Oder wenn ich dich richtig verstanden hab, kann man arraylisten nicht über buttons füllen? Wenn ich das ganze als java(ohne andorid)  mit console  ausfüre funktioniert es. 
So etwas wie public List... geht ja nicht, da kommt ein syntax fehler. 
Ok ein freund hat final vorgeschlagen und meinte so gehts. Sehe gerade dass es kein sinn ergibt weil es unveränderlichkeit  erzwingt .
Danke übrigen für deine hilfe und sry wenn ich mich unklar audrücke ich versuche es so gut ich kann.
Array -> über buttons mit werten füllen->abgleich mit anderer array liste->ergebniss anzeigen


----------



## dzim (23. Okt 2014)

Ich hab gerade ein wenig das Gefühl, veralbert zu werden!

Nein! Du sollst dir keine Tutorials zu Databinding anschauen (per default gibt es das (noch) nicht so direkt in Android)!

Du sollst dir ganz einfach Tutorials zu Java- und Android-Entwicklung anschauen. Die Links habe ich dafür in meiner zweiten Antwort geliefert.

Und da du schon mit den simplen Sachen hier noch arg zu kämpfen hast, verbiete ich dir, dich SQLite auch nur anzunähern! 

So. Hier mal ein Beispielcode (aus dem FF geschrieben, ohne passenden IDE - sollte aber dennoch korrekt sein):

```
public class MainActivity extends ActionBarActivity {

	private final List<Integer> player1 = new ArrayList<Integer>();

	private TextView twP1Attack;
	private Button btnhigh;
	private Button btnfront;
	private Button btnlow;

	 @Override
	 protected void onCreate(Bundle savedInstanceState) {
		
		 super.onCreate(savedInstanceState);
		 setContentView(R.layout.activity_main);
		
		twP1Attack = (TextView) findViewById(R.id.txv_p1attack);
		twP1Attack.setText(player1.toString());
		
		btnhigh = (Button) findViewById(R.id.btn_high);
		btnhigh.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				player1.add(1);
				twP1Attack.setText(player1.toString());
			}
		});
		
		btnfront = (Button) findViewById(R.id.btn_front);
		btnfront.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				player1.add(2);
				twP1Attack.setText(player1.toString());
			}
		});
		
		btnlow = (Button) findViewById(R.id.btn_low);
		btnlow.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				player1.add(3);
				twP1Attack.setText(player1.toString());
			}
		});
	}
}
```

PS: Ich wage zu bezweifeln, das du deinen Code so eins zu eins in der Konsole auführen kannst. Geschweige denn, das er sinnvollen output liefert.


----------



## koschernostra (23. Okt 2014)

Danke für die Antwort, Nein versuche ich nicht, ich versuche dir eifnach mein Problem zu erklären.
Ich hatte meinen Code schon so in etwa wie deiner aber Eclipse hat mir immer einen Synthaxfehler ausgegeben wenn ich die list als private in die main schreibe, tut es mir auch bei deinem Script.

Daher hab ich alles umgeschrieben in der hoffnung es klappt. Vlt. liegt es an irgend welchen einstellungen oder sosnt was. Das java script hat funktioniert, nur gab es dort keine Buttons.

```
package test1;

import java.util.ArrayList;
import java.util.List;

import java.util.ArrayList;
import java.util.List;



public class Arraystest {
	
		
		
	public static double p1Al = 4.5;
	public static double p1Dl = 5.5;
	public static int p1Lp = 6;
	
	public static double p2Al = 6.5;
	public static double p2Dl = 5.5;
	public static int p2Lp = 6;
	
	
	public static int[] aplayer1 ;
	public static int[] aplayer2 ;

	

    public static void main(String[] args) {
    	//[] {3,1,3,1,2,3};
        List <Integer> player1 = new ArrayList<Integer>();
		player1.add( 3 );
		player1.add( 1 );
		player1.add( 3 );
		player1.add( 1 );
		player1.add( 2 );
		player1.add( 3 );
		
		Integer [] aiplayer1 = player1.toArray( new Integer[]{} );
		

		 System.out.println(aplayer1 [5] + "blaa");
		 
		    List <Integer> player2 = new ArrayList<Integer>();
			player2.add( 3 );
			player2.add( 2 );
			player2.add( 3 );
			player2.add( 1 );
			player2.add( 3 );
			player2.add( 2 );
			
			 Integer [] aiplayer2 = player2.toArray( new  Integer[]{} );
			  
			 System.out.println(aplayer2 [1] + "blaa");
    	
    
    	if (player1.isEmpty() && player2.isEmpty()){
    		System.out.println("fehler");
    	}
    	else {
    		
    		
    		if (aplayer1[0] == aplayer2[0] && p2Al > p1Dl) {
    	
    			System.out.println("PLayer 1 hat zurück geschlagen1");
    			p1Lp -= 1;
    		}
    		else if(aplayer1[0] == aplayer2[0]) {
    			System.out.println("Player 1 abgewehrt1");
    		}
    		else {
    			System.out.println("1treffer player1 ");	
    			p2Lp -= 1;
    		}
    		//----------------------
    		if (aplayer1[1] == aplayer2[1] && p2Al > p1Dl) {
    	    	
    			System.out.println("PLayer 1 hat zurück geschlagen1");
    			p1Lp -= 1;
    		}
    		else if(aplayer1[1] == aplayer2[1]) {
    			System.out.println("Player 1 abgewehrt1");
    		}
    		else {
    			System.out.println("1treffer player1 ");	
    			p2Lp -= 1;
    		}
    		//----------------------
    		if (aplayer1[2] == aplayer2[2] && p2Al > p1Dl) {
    	    	
    			System.out.println("PLayer 1 hat zurück geschlagen1");
    			p1Lp -= 1;
    		}
    		else if(aplayer1[2] == aplayer2[2]) {
    			System.out.println("Player 1 abgewehrt1");
    		}
    		else {
    			System.out.println("1treffer player1 ");	
    			p2Lp -= 1;
    		}
    		//----------------------
    		if (aplayer1[3] == aplayer2[3] && p2Al > p1Dl) {
    	    	
    			System.out.println("PLayer 1 hat zurück geschlagen1");
    			p1Lp -= 1;
    		}
    		else if(aplayer1[3] == aplayer2[3]) {
    			System.out.println("Player 1 abgewehrt1");
    		}
    		else {
    			System.out.println("1treffer player1 ");	
    			p2Lp -= 1;
    		}
    		//----------------------
    		if (aplayer1[4] == aplayer2[4] && p2Al > p1Dl) {
    	    	
    			System.out.println("PLayer 1 hat zurück geschlagen1");
    			p1Lp -= 1;
    		}
    		else if(aplayer1[4] == aplayer2[4]) {
    			System.out.println("Player 1 abgewehrt1");
    		}
    		else {
    			System.out.println("1treffer player1 ");	
    			p2Lp -= 1;
    		}
    		//----------------------
    		if (aplayer1[5] == aplayer2[5] && p2Al > p1Dl) {
    	    	
    			System.out.println("PLayer 1 hat zurück geschlagen1");
    			p1Lp -= 1;
    		}
    		else if(aplayer1[5] == aplayer2[5]) {
    			System.out.println("Player 1 abgewehrt1");
    		}
    		else {
    			System.out.println("1treffer player1 ");	
    			p2Lp -= 1;
    		}
    		//----------------------
    	
    		
    		System.out.println("Leben Player 1 = "+p1Lp + " / " + "Leben Player 2 = "+p2Lp);
    	}
    	
    }
     
    }
```


----------



## Harry Kane (24. Okt 2014)

ist das wirklich dein Ernst, einen im wesentlichen unveränderten Codeblock 6x hintereinander in den Quellcode zu klatschen?
Wie wärs mit einer Methode, an die du aplayer1_ und aplayer2 übergibst, und die "Auswertung" im Methodenrumpf durchführst?
Ausserdem kommt mir dieser Block und die Logik sehr verdächtig vor, s. Kommentare


		Java:In die Zwischenablage kopieren


if (aplayer1[5] == aplayer2[5] && p2Al > p1Dl) {
     
    System.out.println("PLayer 1 hat zurück geschlagen1");
    //p2Al > p1Dl --> Attacke von p2 war größer als Defense von p1, trotzdem schlägt Player 1 zurück?
    p1Lp -= 1;
}
else if(aplayer1[5] == aplayer2[5]) {
    //Hier gehts rein, wenn p2Al kleiner oder gleich p1Dl ist
    System.out.println("Player 1 abgewehrt1");
}
else {
    //Und hier gehts rein, wenn die Werte von aplayer[i] und aplayer2[i] ungleich sind, unabhängig davon welcher Wert größer ist. 
    System.out.println("1treffer player1 ");    
    p2Lp -= 1;
}

Kanst du bitte mal erklären, was passieren soll, und was stattdessen passiert? Dein letzter Post enthält keine wirkliche Frage!_


----------



## koschernostra (24. Okt 2014)

Alter ich bin hier in nem Forum um hilfe zu bekommmen oder zu geben und nicht um von euch angemacht zu werden. Wie wärs mal mit ein bischen mehr respekt einem anfänger gegenüber? Ihr seit ja geboren und habt es gekonnt 

Das hier ist ein ganz anderer code als oberen und er funktioniert. Ich wollte dzim nur zeigen das der nicht andorid code kein synthax fehler auspuckt und ich deswegen verwiert war.

Und der letzte code von dzim (danke für deine hilfestellung) funktioniert bei mir in eclipse nicht ( synthaxfehler es kann kein private nur ein final vor list stehen, egal ob in der main oder sosnt wo) . In android studio schon. Daher hat sich das problem erst aufgetan wie oben gesagt. Dass  ich dachte der code hat ein synthax fehler. Hat sich alles in wohl gewollen aufgelöst.

Und warum kommt dir die logik sehr verdächtig vor?

 Und ja ich lösche es gerne, löscht meinet wegen den ganz post wenn er euch stört.


----------



## Harry Kane (24. Okt 2014)

Deine Logik mit den verschachtelten if-Blöcken kam mir nur deshalb verdächtig vor, weil ich vesucht habe, aus den Nachrichten in den Sysouts und den Namen der Variablen auf deren Bedeutung zu schließen.
Sorry, ich dachte, der Schnipsel in deinem letzten Post hätte etwas mit deinem ursprünglichen Problem zu tun bzw. hätte sonst irgendeinen Sinn. Da lag ich wohl falsch.


----------



## dzim (24. Okt 2014)

Sorry, ich versuche es wirklich(!), aber ich werde aus deinen Aussagen einfach nicht schlauer.
Das Problem ist doch, das du mit der Syntax zu kämpfen hast (denke ich zumindest). Da ich leider das Gefühl hab, das keine meiner Ratschläge dir irgendwie weiterhelfen kann, werde ich jetzt aufhören, denn alles, was ich hier nur noch erreichen kann, ist dich noch weiter zu verwirren.
Ich hoffe, du kommst irgendwie weiter, mit deinem Programm!


----------



## koschernostra (24. Okt 2014)

@ dzim doch doch funktioniert alles prima  


koschernostra hat gesagt.:


> [...] funktioniert bei mir in eclipse nicht ( synthaxfehler es kann kein private nur ein final vor list stehen, egal ob in der main oder sosnt wo) . In android studio schon. Daher hat sich das problem erst aufgetan wie oben gesagt. Dass  ich dachte der code hat ein synthax fehler. Hat sich alles in wohl gewollen aufgelöst.


In allen anderen Editoren gibt es keinen Syntaxfehler, da stimmt irgend was mit Eclipse nicht. Der zeigt seit gestern auch bei anderne Scripten, plötzlich Syntaxfehler. Daher Danke ist gelöst!!


----------



## dzim (24. Okt 2014)

Ok, dann bitte das Thema als gelöst markieren.


----------

