Beiträge von and.dev

    Spontan fallen mal folgende Punkte auf:


    - wenn du den Cursor mit einem Adapter nutzen willst, dann muss deine Rowlist eine Spalte Namens "_id" enthalten
    - hab ich jetzt nicht probiert, aber "select name, sum(betrag) as betrag..." ist schon ein sportlicher Ansatz ;)
    - die abgefragten Spalten deines Cursors müssen mit den Einträgen in "dbSpaltenNamen" übereinstimmen


    Zu der Fehlermeldung hast du bestimmt auch eine Zeilennummer - was steht denn in der Zeile?
    Mit dem SQL-Statement hat das jedenfalls wenn dann nur indirekt zu tun.



    Zum Lösungsansatz (davon ausgehend das deine SQL-Abfrage deinen Anzeigewunsch widerspiegelt):


    1. Die ID wirst du für die Liste ja selber nicht benötigen (schon weil es eben mehr als eine pro Eintrag geben kann);
    der Adapter will aber eine, noch dazu mit einem Namen den es in deiner Tabelle nicht gibt.
    -> select 1 as _id, name as n, sum(betrag) as b from tabelle group b 1,2 order by 2
    Sollte das gewünschte Ergebnis in geeigneter Form liefern.


    2. Deine Zuordnungs-Arrays müssen dann halt entsprechend angepasst werden:
    dbSpaltenNamen = new String[] {"n", "b"};
    zuListViewIDs = new int[] {R.id.txt_name, R.id.txt_summe};
    ...Das entsprechende Layout muss natürlich ebenfalls dazu passend gestaltet werden.

    Zitat

    habe die populate methode in die onResume methode des fragments SChuldner gepackt

    Weise Entscheidung ;)
    Ich hoffe du weißt auch, warum du das gemacht hast (hast es also nicht nur gemacht, weil ich es vorgeschlagen habe) :)


    Zitat

    getActivity().startManagingCursor(cursor = mainActivity.myDBHandler.getAllRows());

    Genau, denn du brauchst den gemanaged'ten Cursor ja noch beim Aufrufer, für den CursorAdapter der ListView.

    Zitat

    Zumindestens stürzt die app nicht ab und wird normal ausgefürht. da ich momentan noch keine einträge in der db habe werde ich diese erstmal füllen müssen, ob die listview dann auch dementsprechend mit den werten geladen wird.

    Den Dialog dazu hattest du doch bereits erstellt, oder habe ich das falsch gesehen?

    Zitat

    Danke and.dev für die Hilfsbereitschaft

    Gerne, ich hoffe es war lehrreich :)

    Zitat

    Das habe ich nicht verstanden. Was genau meinst du?

    Du hättest auch direkt "getActivity().startManagingCursor(cursor);" verwenden können, dann gibts aber an jeder betreffenden Stelle eine Warnung, das startManagingCursor() deprecated ist.
    Mit der Extrafunktion cursorManaging() reduzierst du die Warnungen im Code auf eine zentrale Stelle.



    Zitat

    Also kann man davon ausgehen das mainActivity null ist.

    Gut, dann ist das ja auch geklärt :)

    Zitat

    Aber wie kann das sein??? Ich habe ja in der onAttach() Methode eine MainActivity Referenz initialisiert.

    Dann wird deine populate... Funktion entweder vor dem onAttach() ausgeführt, oder getActvity() liefert null (was ich im onAttach Context allerdings für nicht sehr wahrscheinlich halte) ;)


    Vielleicht verlegst du die letzten beiden Zeilen deines onCreate() mal in onResume(), da sind die ohnehin besser aufgehoben und vielleicht löst das dein attach Problem gleich mit.

    Zitat

    Kannste ein biespiel geben?

    Was ist unklar?


    public class DB {
    ...


    public static boolean open(String filename) {
    ...
    }
    public static void close() {
    }
    ...
    }


    Im Code kann ich dann an jeder Stelle "DB.open(path)" etc. verwenden, ohne zuerst herleiten zu müssen, das eine bestimmte Activity einen bestimmten Member bereits initialisiert hat o.ä.

    Zitat

    auch so bekomme ich den gleichen fehler.

    Der Code sieht aber korrekt aus, also muss da dann etwas anderes im argen liegen, wenn du so wirklich den gleichen Fehler bekommst.
    Aber da das nur Textcode war, können wir das ja erstmal vernachlässigen.


    Zitat

    dass ich in dieser populateListViewFromDB() methode einen cursor anlege und dann in der mainactivity.cursorManaging() methode gleich noch einen weiteren cursor anlege (das ist doch doppelt gemoppelt oder nicht!?).

    Natürlich, und je nachdem wie der Code weitergeht, wird er so halt auch nicht funktionieren.
    Die Extrafunktion hast du erstellt, damit du nur ein zentrales deprecated bekommst?


    Zitat

    In der Zeile 109 steht: cursor = mainActivity.myDBHandler.getAllRows();

    ...und diesmal ist es ein nullpointer und kein illegal state ;)
    OK:
    - getAllRows kann natürlich null zurückgeben, etwa wenn die Abfrage nicht korrekt ist oder sonst ein Fehler auftritt; nachdem du laut Code in der unmittelbar folgenden Zeile nichts mit dem Cursor machst, ist das nicht das Problem
    - demnach wird entweder myDBHandler oder mainActivity null sein; ob das casten von getActivity() auf eine bestimmte Klasse so Java-Like ist, weiss ich ja jetzt nicht... ich verwende für meine Datenbank-Helper eine Klasse mit statischen Members, da ergibt sich diese Problematik gar nicht.


    Ich würde jetzt wahlweise einen Breakpoint an die Stelle setzen oder ein paar Log Ausgaben einstreuen, wenn ich mit Lesen des Codes nicht weiter kommen würde.

    Zitat

    Ich poste das mal kurz wenn es ok ist:

    Natürlich, anderenfalls würde man dir hier nicht helfen können, schätze ich ;)
    Guckmal:

    Zitat

    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();
    return cursor.getCount();

    (hab die auskommentierten Zeilen zwischendrin entfernt, damit du es besser sehen kannst)
    Du schließt den Cursor und fragst ihn anschließend nach getCount() - das war nicht dein Plan, oder? :P

    Zitat

    Habe dann in der log die zeilen ausgeben lassen und auch da waren die voll durcheinander.

    Damit haben wir ja schon mal als Fakt, das die DB existiert und Daten enthält ;)


    Zum "Durcheinander" kann ich jetzt natürlich nichts sagen, solange ich keinen Code gesehen habe.
    Wichtig vielleicht: die "Zeilen" einer DB-Tabelle haben keine (definierte) Ordnung, wenn deine Abfrage also kein "order by" enthält, dann kommen die Zeilen nicht zwangsläufig in der Reihenfolge heraus, in der du die eingefügt hast.
    Meinst du das vielleicht mit "durcheinander"?



    Zitat

    jedoch bekomme ich mysteriöserweise eine nullpointerException.

    Da du ja schon weißt wie man das Logcat liest, sollte sich die Ursache ja leicht finden und beheben lassen, oder?

    Schließe mich Marco an :P


    Außerdem:
    - das rot kommt mir zu grell vor, hast du das mal zB auf nem S2/S3 angeschaut? Könnte mir vorstellen das einem da die Augen weh tun ;)
    - Das Icon in der Actionbar würde ich transparent besser finden, wie es jetzt ist, sieht es "angeflickt" aus
    - Warum sind die Titel nicht mittig?

    Zunächst einmal würde deine DB auch nicht unter data/data liegen, dort liegt nämlich der Ordner deiner App (bei Demos meist was in der Art "com.example.*", und erst in diesem Verzeichnis findest du die Daten deiner App.


    Dann ist noch zu beachten, das der Zugriff auf diese Ordner aus Sicherheitsgründen beschränkt ist, d.h. man kann die Dateien nur sehen, wenn man über entsprechende Rechte verfügt.
    Ob der DDMS-"User" über solche verfügt, weiß ich gerade nicht auswendig (mangels Bedarf), in der adb Doku meine ich aber gelesen zu haben, das die notwendigen Berechtigungen erlangt werden können.


    Die eigentlich Frage aber ist: warum willst du da überhaupt gucken?
    Läuft die App nicht? Willst du in die DB hineinschauen?


    Die DBs meiner eignen Apps sind meist recht groß (bis zu 1.3 GB), daher lege ich die grundsätzlich nicht im App Verzeichnis ab, sondern in der vorgeschriebenen Struktur auf dem externen Speicher; wenn du also in deine DB hineinschauen, sie am PC ergänzen oder jederzeit einfach austauschen können willst, dann würde ich dir diese Vorgehensweise empfehlen.

    Zitat

    Nur leider funktioniert das noch immer nicht auch auf diesem Weg nicht.

    Du hast das so ausprobiert, wie es da steht?
    Der Lösungsansatz ist ein ganz anderer als deiner, daher die Frage.


    Hast du diesen Punkt mal weiter verfolgt:

    Zitat

    Hm, das bedeutet dann wohl, das die Login-Seite bereits irgendwas speichert, wenn es die Startseite nicht tut?

    Der Ansatz aus meinem Link tut das nämlich.

    Zitat

    Das Problem warum ich die Scrollviews hatte besteht aber darin das der User in der Lage sein soll frei zu scrollen während er am Zug ist, um zu sehen was die anderen machen.

    Das wird ja durch dieses Konzept nicht ausgeschlossen; berechne den sichtbaren Ausschnitt in dem Fall einfach nicht nach der Postion seiner Figur (oder nur initialisierend, also wenn Spieler A am Zug ist, scrollt die Map automatisch so, das Spieler A seine Figur sehen kann), sondern implementiere zB Controls zum Springen von einer Figur zu nächsten (dann muss der Spieler nicht suchen) oder verwende Wischgeseten zur Manipulation des sichtbaren Bereiches.

    Zitat

    Wie gesagt es gibt keine Fehlermeldung. Die App stürtzt nicht wirklich ab, sondern wird geschlossen und ich bin wieder auf dem Homebildschirm des Emulators.

    Wie gesagt: schau halt ins Logcat, da wird schon stehen warum deine App beendet wurde.


    Zitat

    Wieso ist das bei Android nicht möglich/blöd umzusetzen?

    Wer hat denn gesagt, das sei nicht möglich?
    Der Kollege hat ganz richtig angeregt, Tilemaps zu verwenden.


    Was du da versuchst, ist ein 36.864.000 Bytes großes Bild darzustellen, und so viel Speicher (zusätzlich) wird der Emulator deiner App nicht zugestehen - das wäre jedenfalls meine Vermutung, solange du nicht in Logcat geschaut hast.


    Abgesehen davon wage ich mal vorsichtig zu bezweifeln, das man zwei ScrollViews einfach so funktionierend ineinander schachteln kann (also dann beide noch funktionieren).
    Aber da das ja hoffentlich nur ein Test sein sollte, können wir dieses Thema vorerst ignorieren ;)

    Zitat

    Ja genau also immoment bin ich danach dann wieder ausgeloggt.

    Hm, das bedeutet dann wohl, das die Login-Seite bereits irgendwas speichert, wenn es die Startseite nicht tut?
    Mit dieser Thematik kenne ich mich zu wenig aus, da werde ich dir nicht wirklich helfen können, sorry.

    Zitat

    Ja die Buttons sind jetzt da.

    Ich verstehe zwar noch nicht, wozu das gut sein soll, aber schön das es soweit schon mal funktioniert hat :)

    Zitat

    Ich würde ja gerne den Button benutzen nur hast du ihn glaube ich nicht aktiviert. Den musst du bei jeder antwort aktivieren glaube ich.(Bedankomat aktivieren.)

    Danke für den Tipp, wäre ich im Leben nicht drauf gekommen, das ich das selber machen muss... was könnte wohl der Sinn dieser Vorgehensweise sein?
    Ich habs jedenfalls beim letzten Beitrag (und sicherheitshalber bei diesem) mal gemacht, ist da jetzt jeweils ein Button zu sehen?


    Zitat

    wenn ich jetzt nach dem Login auf der Seite etwas machen will muss ich Cookies verwenden oder?

    Du meinst, damit bei weiteren Seitenwechseln die Login-Info erhalten bleibt bzw. zur nächsten Seite transportiert wird?
    Das wird vom Design der Seite abhängen.

    Zitat

    Woher ich weiß das es gehen muss?
    Weil es jetzt dank deiner Hilfe geht :P

    Das gilt nicht als Herleitung, aber schön das du es nun hinbekommen hast :)


    Zitat

    Danke nochmal :love:

    Gerne :)
    Ich bin ja noch neu hier, aber ist es in diesem Forum nicht vorgesehen, das man zum Bedanken den entsprechenden Button verwendet?
    Oder für was wird der verwendet?


    Ich helfe immer gerne, solange ich nicht den Eindruck gewinne, das mein Gegenüber sich mit der Materie gar nicht selber beschäftigen möchte, sondern einen fertigen Codeschnipsel von mir erwartet.

    Nochmal hinschauen:
    <input type="submit" name="submit" value="login"/>


    vs.


    BasicNameValuePair("submit", "submit")


    Zitat

    Eigentlich sollte es möglich sein sich dort auf diese Art einzuloggen.

    Das leitest du aus welchen Fakten her?
    "Weil ich das gerne möchte" gilt nicht als Antwort ;)

    Einen response würdest du in jedem Fall bekommen, bei falschen/leeren Daten dann halt sowas wie "Passwort falsch" o.ä.


    In deinem HTML Code steht noch ein 3. Wertepaar (submit=login), das würde bei manuellem Ausfüllen der form mit übertragen werden, von deinem Java Code aber nicht.
    Wäre einen Versuch wert, oder?


    Ansonsten könnte ich mir vorstellen, das der Betreiber der Webseite solche Auto-Logins nicht möchte und darum gewisse Hürden etabliert hat, um sowas zu erschweren/verhindern.
    Mit PHP kenne ich mich nicht aus, aber wenn der Login mein Auftrag gewesen wäre, dann wäre meine erste Recherche, ob man nicht herausfinden kann, ob der Request vom eigenen Server kam ;)

    Wären die Daten nicht gesendet worden, dann würdest du die Seite gar nicht angezeigt bekommen, oder?


    Daher wäre meine erste Vermutung, das du nicht alle Daten übermittelt hast, die von der Originalseite übertragen werden.


    Das scheint mir auffällig:
    html: input type="text" name="id"
    aber:
    java: BasicNameValuePair("userid", "idexample")