cursorindexoutofboundsexception

  • Wenn du gerade vorher eine leere ArrayList angelegt hast, dann ist da wahrscheinlich auch nichts drin, oder?
    Du solltest schon eine Liste mit Inhalten nehmen, sonst wird das auch nix... ^^


    Probiere doch vorher auch noch mal PlayerList.size() - das gibt dir die Anzahl der Elemente, ich denke mal, das ist bei dir 0, oder??

  • Ja das stimmt wohl..


    Also Ausgangslage ist ja folgende:


    Ich habe eine listView in der eine Tabelle voller Player angezeigt wird. Wenn ich nun auf einen Player klicke, dann öffnet sich eine neue Activity, in der ich nur den Datensatz von dem Player brauche, auf den ich vorher geklickt habe.
    Um die gesamte Liste zu holen benutze ich ja folgende Methode:



    In diese Methode müsste ich ja dann irgendwie das mit dem Iterator einbauen, aber irgendwie stehe ich auf dem Schlauch gerade und hab ehrlichgesagt keinen Plan wie ich das anstellen soll.
    Könntest du mir da vielleicht nochmal kurz helfen? :-[

  • Ich hatte ja schon geschrieben, dass du dir mal das Tutorial genauer anschauen sollst - dort im Adapter ist ein onClick-Listener eingebaut, hier kannst du die Activity für den Player aufrufen und die position als Parameter übergeben - oder auch das Player-Objekt (PlayerList.get(position)), wenn deine Player implements Serializable haben...


    In der Player-Activity kannst du dann aus dem getIntent den Datensatz mit getSerializableExtra wieder rausziehen.


    Du brauchst eigentlich nur den ArrayAdapter ersetzen durch einen eigenen Adapter, der die PlayerList als Datenliste bekommt.


    Und dann noch mit lPlayer.setOnItemClickListener(myAdapter) die Click-Behandlung an den Adapter übertragen.

  • Also ich glaube im Großen und Ganzen habe ich es verstanden, aber es klappt trotzdem noch nicht ganz.
    Ich habe jetzt folgende Activitys:


    Team.java (Hier werden alle Player in einer listView angezeigt)


    und Player.java:



    In der Team.java übergebe ich nun in der

    Java
    public void onItemClick

    mit

    Java
    myIntent.putExtra("PlayerList", PlayerList.get(position));

    die PlayerList an die Player.java. Ich hoffe das das soweit richtig ist?!
    Und in der Player.java nehme ich die Liste mit

    Java
    List<Entry> PlayerList = getIntent().getSerializableExtra("PlayerList");

    entgegen.
    Und dann lasse ich den Iterator in der

    Java
    public void readPlayer()

    drüberlaufen um die einzelnen Einträge "rauszufiltern".
    Allerdings sagt er mir beim getIntent: "Type mismatch: cannot convert from Serializable to List<Entry>"
    Also ganz richtig kann es noch nicht sein :S
    Und was genau muss ich implements Serializable setzten?

  • Das hatten wir schon mal, oder?


    Nimm bitte überall ArrayList<T> statt List<T> - die List ist nicht serializable, ArrayList aber sehr wohl... ;)


    Java
    ArrayList<Entry> PlayerList = getIntent().getSerializableExtra("PlayerList");
  • Geht trotzdem nicht...


    Die Methode sieht jetzt so aus:


    Java
    public void readPlayer(){
    		ArrayList<Entry> PlayerList = getIntent().getSerializableExtra("PlayerList");
    		Iterator<Entry> myIterator = PlayerList.iterator();
    		while (myIterator.hasNext()) {
    			Entry player = myIterator.next();
    			String name = player.getName();
    			Toast.makeText(this, player.getName(), Toast.LENGTH_LONG).show();
    
    
    		}


    Jetzt markiert er mir das "getIntent().getSerializableExtra("PlayerList");" und sagt:"Type mismatch: cannot convert from Serializable to ArrayList<Entry>"


    Ist denn das "myIntent.putExtra("PlayerList", PlayerList.get(position));" in der ersten Activity richtig?

  • Ich vermute, du hast den Fehler schon richtig benannt.


    Du musst die ganze ArrayList übergeben und nicht einen einzelnen Eintrag:


    Java
    myIntent.putExtra("PlayerList", PlayerList);


    Ich hoffe, das hilft. *däumchendrück*


  • Dann gibt er mir aber für ".putExtra()" einen "The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, List<Entry>)" Fehler aus.
    Außerdem muss ich doch irgendwie die ID mitgeben, damit ich den Datensatz von dem Spieler kriege auf den ich geklickt habe oder?
    Weil so übergebe ich ja die gesamte PlayerList...?!

  • Ich weiß nicht ob das bei dir war oder wo anders: List ist nicht serialisable, ArrayList ist es schon.


    Also: " is not applicable for the arguments (String, List<Entry>)" bedeutet, dass du ihm eine List und keine ArrayList gegeben hast - schreib doch bitte überall statt List lieber ArrayList, dann gehts auch.


    Vor allem an dieser Stelle muß vorne ArrayList stehen:

    Java
    ArrayList<Entry> PlayerList = new ArrayList<Entry>();


    Du könntest auch schreiben:

    Java
    myIntent.putExtra("PlayerList", (ArrayList) PlayerList);


    aber das ist m.E. nicht die gute Variante, da du ja sowieso nur die ArrayList verwendest und keine anderen Listentypen in der Variable PlayerList unterbringst.

  • OK - Wieder ein Teilerfolg.


    Ich übergebe die PlayerList mit


    Java
    myIntent.putExtra("PlayerList", PlayerList);




    (Ohne den Cast geht es nicht, obwohl ich alles von List auf ArrayList geändert habe. Ist aber erstmal egal.)


    Mit dieser Methode hole ich die PlayerList ab und will dann einen Toast mit dem Namen des Spielers ausgeben, auf den ich vorher geklickt habe.
    Allerdings gibt er mir so für jeden Spielernamen einen Toast nacheinander aus.
    Warum der das macht ist mir klar - die while-Schleife verstehe ich.
    Aber wie mache ich das jetzt das er mir nur den Namen des Spielers ausgibt auf den ich vorher geklickt habe?
    Muss ich dann nicht im putExtra() auch die ID übergeben oder so ähnlich?

  • ah - entschuldige - da bin ich dann auch etwas durcheinander gekommen, weil ich dachte, du willst die ganze Liste übergeben...


    Wenn du nur einen Player übergibst, dann heißt das natürlich (die Zeile steht im onItemClick vom Adapter, oder?):


    Java
    myIntent.putExtra("Player", PlayerList.get(position));


    und


    Java
    public void readPlayer(){
    	 	
    	Entry player = (Entry) getIntent().getSerializableExtra("Player");
    
    
    	String name = player.getName();
    	Toast.makeText(this, name, Toast.LENGTH_LONG).show();
    }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!