cursorindexoutofboundsexception

  • Hier ist die Entry.java:



    Also eingegeben habe ich auf jeden Fall was bei name und lastname...

  • Dass du da was eingegeben hat, glaub ich dir gerne, aber hast du das auch aus dem Eingabefeld in eine Variable übernommen???


    Ich hab mich noch mal durch die ganzen Codebeiträge durchgewühlt und auch was gefunden: SaveClick holt zwar alle View-Elemente und prüft, ob überall was eingegeben ist (ist aber nicht so schön programmiert, oder was meinst du...).


    Aber in SaveClick werden die Eingaben der Felder nicht in die Variablen name, lastname etc. übernommen:

    Java
    name = editname.getEditableText().toString>();
    ...


    Es funktioniert zwar auch mit getText(), aber getEditableText() ist die bessere Methode bei EditText-Feldern...

  • BINGO!
    Das wars ;) Es funktioniert!!!
    Aller Aller Aller Besten Dank für deine Unterstützung!!
    Aber eine Frage habe ich noch ;) Wie kann ich die Daten wieder zurücksetzten für den Emulator?
    Ich habe da jetzt tausende Testeinträge drin, die ich gerne wieder raus hätte ;)
    Achja: Und weißt du zufällig wie ich die Playerlist per Intent mit in die nächste Activity nehmen kann? Das ist ja eine Liste voller Entries und das normale .putExtra unterstützt das ja nicht?!
    Gruß


    M3doXX

  • Die Daten im Emulator kannst du zurücksetzen, wenn du entweder die App über die Settings deinstallierst oder du machst einfach eine neue Datenbankversion, dann wird ja die alte Tabelle gelöscht (wenn du den richtigen Tablename im DELETE TABLE eingetragen hast!!!) und neu angelegt.


    Du kannst eigene Datenklassen auch für Intents verpacken, wenn sie Serializable implementieren - das geht meistens ohne größeren Aufwand, wenn die lokalen Variablen alle serializable oder Basis-Typen sind. Dann funktioniert auch intent.putExtra(). Dazu gibt's dann intent.getSerializableExtra().

  • Ich hab die Klasse als serialisierbar implementiert, aber er zeigt in der Zeile

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


    trotzdem den Fehler "The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, List<Entry>)" an.
    Hier der Code:



  • Stimmt - List ist auch nicht Serializable - aber ArrayList ist es schon.


    Und weil du eigentlich sowieso eine ArrayList verwendest, kannst du das doch auch gleich so definieren. Du musst es aber an mehreren Stellen ändern...

  • Du kannst in Eclipse in den Quelltexten suchen mit STRG-F mit dem Suchstring \bList\b und der Option Regular expressions - und dort überall ArrayList eintragen.


    Oder du machst einen cast in der putExtra - das ist aber nicht die schöne Methode:

    Java
    myIntent.putExtra("PlayerList", (ArrayList<Entry>) PlayerList );
  • Ich muss doch noch einmal kurz nerven...
    Ich habe eine neue Tabelle erstellt, in die Spiele eingefügt werden sollen.
    Wenn ich aber auf "Spiel speichern" klicke, dann kriege ich eine "java.lang.nullpointerexception".
    Project - clean und Eclipse neu starten habe ich schon versucht...bringt nichts...


    Hier der entsprechende Code:


    AddGame.java


    EntryGame.java


    GameDataSource.java



    MySQLiteHelper.java



    Schedule

  • Mach doch mal einen Doppelklick auf der Fehlermeldung, die im Log auf deinen Code hinweist - dann findest du die Variable, die nicht initialisiert wurde.


    In den Fehlermeldungen stehen auch immer Zeilennummern... ;)

  • Das ist ja eine wirklich hilfreiche Zusatzinformation - ich war nämlich erschlagen von den vielen Klassen! ?(


    Du hast gamedatasource zwar irgendwo mal initialisiert, aber in den anderen Klassen leider jeweils wieder lokal ein gamedatasource angelegt und nicht initialisiert.


    Wahrscheinlich solltest du dafür auch mal gamedatasource = new GameDataSource(this); aufrufen, oder vielleicht einen Service dafür einsetzen oder auf eine public-Variable einer anderen Klasse zugreifen...

  • Es war wohl gerstern doch ein bisschen spät :D
    Die Initialisierung von gamedatasource war da, aber auskommentiert :-/
    Aber ein großes Problem habe ich noch zu lösen wo ich nicht weiß wie das geht...
    Ich will jetzt in der listView in der die Spiele angezeigt werden mit einem Klick auf das jeweilige Spiel in eine neue Activity "Spiel" kommen.
    In dieser neuen Activity sollen die Details des Spiels angezeigt werden.
    Ich hab es bis jetzt nur geschafft, das ich per Klick auf das jeweilige Spiel in der ListView in die neue Activity komme und per .putExtra() die ID mitgebe.
    Wie aber kriege ich jetzt die restlichen Details aus der DB-Tabelle in die neue Activity??
    Besten Dank für deine Hilfe!!

  • Ok.
    Aber mein Hauptproblem ist, das ich es nicht hinkriege einzelne Spalten auszulesen...
    Also wie ich mir aus der DB die PlayerList hole (also die ArrayList mit den Entrys) das weiß ich, nur wie komme ich an die einzelnen Attribute zu der jeweiligen ID? Ich habe ja quasi nur die ID und mit der will ich die dazugehörigen Attribute aus der DB holen...
    Wenn ich mir die gesamte Liste hole bringt mir das nicht viel, da ich in verschiedenen Feldern, verschiedene Attribute anzeigen will...

  • Kommt drauf an, wo du die Daten anzeigen willst.


    Wenn es in einem ListView ist, dann brauchst du einen Adapter, der aus deiner ArrayList<EntryGame> die einzelnen View-Elemente baut.


    Dazu hab ich ein Tutorial geschrieben, vielleicht hilft dir das weiter


    Ansonsten kannst du auch über eine ArrayList iterieren und dabei alle Datensätze der Reihe nach verarbeiten:


    Java
    Iterator<EntryGame> myIterator = GameList.iterator();
    while (myIterator.hasNext()) {
    	EntryGame game = myIterator.next();
    	// jetzt hast du ein EntryGame - mach was damit...
    	Log.v("GameIteratorTest", "Game: " + game.getHometeam + " - " + game.getGuestteam);
    }


    Das ist aber nur sinnvoll, wenn du die Daten bearbeiten willst.


    Wenn es nur um die Anzeige einer Liste geht, dann lies dir mal das Tutorial durch (und gibt mir Verbesserungsvorschläge).
    ;)

  • ListView hat den Vorteil, dass er gleich scrollt und auch Klick-Events verarbeiten kann. Und der Trick mit Adapter ist nur beim ersten Mal schwierig, wie vieles andere auch. ^^


    Und wenn du Listen als ListView anzeigst, ist das auf Android sehr schnell, weil der ListView einige Tricks der Hardware ausnutzt.


    Ich hab mir am Anfang die TextViews auch selber in LinearLayouts und ScrollView zusammengestrickt, aber war immer unzufrieden bis ich mich dann mal mit ListView angefreundet hab. ;)

  • Also ich hab mich erstmal für die Iterationsvariante entschieden.
    Es funktioniert aber nicht richtig.


    Das ist meine Funktion die einen Toast mit den Namen aufrufen soll.


    Java
    private PlayerDataSource playerdatasource;
    	List<Entry> PlayerList = new ArrayList<Entry>();
    	
    	public void readPlayer(){
    	Iterator<Entry> myIterator = PlayerList.iterator();
    	while (myIterator.hasNext()) {
    		Entry game = myIterator.next();
    		String name = game.getName();
    		Toast.makeText(this, name, Toast.LENGTH_LONG).show();
    	}


    Wenn ich die Methode per Button aufrufe geschieht aber nichts ?!

Jetzt mitmachen!

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