Beiträge von and.dev

    Zitat

    ok, keine leerzeichen in der DB in den feldern


    Gut, dann hast du ja jetzt mindestens 2 Dinge gelernt:
    1. keine Leerzeichen in den Feldern
    2. Wie schreibt man eine query auf, die zwei Felder als zusammengesetzten Wert liefert, etwa um den dann in einem 1zeiligen Spinner Layout anzuzeigen ;)

    Zitat

    totKost = Double.parseDouble(format.format(totKost));
    und hiermit sollte er doch eigentlich mein double so formatieren wie ich es eine Zeile zuvor angegeben habe.


    Der Teil "format.format(totKost)" wird das wohl auch tun (formatierte Zeichenfolge), das Wunschergebnis wird durch das parseDouble() aber gleich wieder zerstört.
    Eine Zahl (totKost) hat keine "Formatierung", sondern speichert nur den Wert, und der Wert von 77.60 ist nun mal 77.6


    Ich vermute mal, das du den formatierten Wert irgendwo anzeigen möchtest - da nimmste dann einfach die Zeichenfolge statt deines doubles.



    Zitat

    das ist der Query Builder von dem du gesprochen hast, oder?


    Nö, ich meinte das in Bezug auf die App die du zum Angucken deiner DB benutzt hast.

    Zitat

    was ist daran nun falsch?


    Was soll der Code denn eigentlich genau bewirken?
    totKost = Double.parseDouble(format.format(totKost));
    weist der Variablen in deinem Kontext theoretisch den Wert wieder zu, den sie am Anfang hatte...

    Zitat

    keine ahnung für was das teil root braucht, aber mir wurde es empfohlen.


    Blöde Einschränkung, dann werde ich das gar nicht erst testen.


    Ich prüfe meine Daten und teste meine Statements eh lieber am PC ;)



    Zitat

    so richtig?


    Nicht raten.
    ...und nein, wenn der Schnipsel vollständig sein soll, dann enthält er mehrere Fehler.


    Mein Beispiel war eigentlich auch für den laut Beschreibung in der App enthaltenen Query-Builder gedacht ;)
    Aber schön, das du rawQuery() gefunden hast - auch wenn ich jetzt vermutlich Prügel von der Java-Fraktion erhalte: ich arbeite ausschließlich damit (mit voll ausformulierten SQL-Statements) ;)



    Zitat

    aber du könntest mir mal kurz Zusammenfassen was die "Pipes" und der "Slash" bewirken


    http://www.sqlite.org :P


    Die Pipes sind der concat operator (nicht nur) in SQLite und der Slash ist Bestandteil einer Textkonstante (daher die "'" links und rechts.
    Wenn alles richtig aufgeschrieben wird, liefert die Query Daten der Form "VW/Golf", so das du die eigentlichen Daten, aber auch evtl. vorhandene Blanks sehen kannst.



    Zitat

    Lag wahrscheinlich am Lehrer der sich immer an der dritten Normalform aufgegeilt hat...


    Ja, Normalformen sind zwar relevantes Wissen, aber mir ist auch schon öfter aufgefallen, das Lehrende darüber vergessen, den praktischen Nutzen hinreichend zu vermitteln.

    Zitat

    SQLite_Debuggers


    Kannst du sagen, wozu eine solche App zwingend root benötigt?
    Oder ist das nur, um die DBs in den privaten Speicherbereichen öffnen zu können?



    Zitat

    sieht es nicht danach aus


    Aber sicher weißt du es nicht?
    Wäre mir zu wenig ;)
    probier mal "select marke||'/'||hersteller from autos" in der app, dann solltest du sicher sehen, ob da Blanks sind oder nicht (die Namen sind natürlich zuvor den deinen anzupassen)



    Zitat

    Als letztes habe ich von VARCHAR(20) auf TEXT(20) umgebaut, hatte leider keinen Effekt ;(
    Was hab ich denn noch für Vorteile, ausser das es der korrekte Datentyp für SQLite ist?


    Zum einen wäre es korrekterweise nur "text" (ohne Größenangabe) und zum anderen hast du dadurch keine fassbaren Vorteile, im create etable Code steht bei SQLite wahrscheinlich etwas in der Art if token.matches("varchar(*)") or token.matches("char(*)") token = "text";
    der Vorteil ist das vermehrte Wissen über das von dir eingesetzte Werkzeug :)
    http://www.sqlite.org kennst du? Da würdest du bei Bedarf auch genaueres zu den Sachen finden, die ich gestern skizziert habe (rtrim, "||" etc)


    Wenn du Datenbanken mal irgendwann nicht mehr nur als Excel für Arme nutzen willst, sondern aus dem angebotenen Service u.a. erhebliche Arbeitsersparnis gewinnen möchtest, dann empfehle ich wärmstens das Einlesen in SQL-Syntax (allgemein und speziell SQLite) :)



    Zitat

    Aber vielen Dank für deine Mühe


    Gerne, aber eigentlich gibts in diesem Forum Knöpfen für sowas unter den Beiträgen, die das freigeschaltet haben (hab ich für diesen Beitrag zur Ansicht noch mal gemacht) 8)

    Tja, ich kann da jetzt auch nur raten...
    Als erstes würde ich mal die Style-Zeilen entfernen, um auszuschließen, das es da irgendwelche paddings, margins o.ä. gibt
    Wenn das nicht zum Ziel führt, würde ich in die DB schauen um zu verifizieren, ob da nun Leerzeichen drin sind oder nicht.


    Die SQLite Doku sagt nichts über fixed length support, also gehe ich (zusammen mit meiner umfangreichen SQLite Erfahrung) mal davon aus, das die Blanks nicht beim select hinzu "gelogen" werden.
    Was du diesbezüglich noch tun könntest, um ganz sicher zu gehen wäre, die DB wegschmeissen und deine create table von "varchar()" auf "text" umstellen, da das der native Datentyp für SQLite ist.

    Zitat

    ich verstehe nur deinen Code nicht, bzw wo ich den anwenden muss..


    Das macht nichts, solange du deinen eigenen Code noch nicht verstehst, wäre das jetzt vielleicht auch ein bisschen viel des guten.
    Wenn du mit deiner jetzigen Lösung klar kommst, genau weißt warum und wie sie funktioniert und das hier dann immer noch wissen willst, dann können wir das gerne noch vertiefen.

    Zitat

    da ist kein Layout drin.


    Ich darf dazu mal aus deinem Source zitieren?

    Zitat

    // set layout for activated adapter
    sca.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);



    Zitat

    ich will den Text nämlich so angezeigt haben
    Porsche Panamera


    Das wäre dann auch mit dem Standard-Layout gegangen 8)
    "select _id, marke||' '||modell as t from tabelle..."



    Zitat

    was denn die .rtrim und wie verwende ich sie im SQL Statement ?


    http://www.brighthub.com/inter…ment/articles/119597.aspx

    Zitat

    Sonderfall indem man kein Layout braucht weil von anfang an keins da war


    Wie meinst du das denn? Da war natürlich von Anfang an eines, nur halt kein von dir manuell erstelltes.


    Zitat

    sieht meine Ausgabe auf dem Spinner ungefähr so aus


    Demnach hast du die TextViews nebeneinander statt 2zeilig angeordnet?



    Zitat

    ich vermute das die Texte aus der Datenbank hinten mit Leerzeichen aufgefüllt sind.


    Wie bzw. wo befüllst du die DB denn?
    Wenn da Leerzeichen sind, dann werden die vermutlich aus der ursprünglichen Quelle kopiert worden sein, SQLite hab ich das noch nie machen sehen, und schon gar nicht bei varchar()


    Die aus diversen Gründen bevorzugte Lösung würde natürlich darin bestehen, das die Leerzeichen erst gar nicht in die DB gelangen.
    Falls das nicht durchführbar ist (etwa weil du die DB nicht erstellst) wäre Plan-B die Verwendung von rtrim() im SQL Statement;
    Plan-C könnte noch die Verwendung eine ViewBinders sein.

    Code ist immer gut, beschränkt die Interpretationsmöglichkeiten und sorgt somit für effizientere Kommunikation.


    Was dir offenbar fehlt ist Grundwissen zu Layouts, vielleicht solltest du da noch nachbessern :)


    In deinem konkreten Beispiel:
    1. "xmlns:android" gehört lediglich ins root element des Layouts, da hier der Namespace definiert wird
    2. ein Layout benötigt ein root Element, in dem du deine childs dann unterbringst, deinem Beispiel fehlt ein solches


    Wenn du den Code nur kopierst, ohne ihn zu verstehen, dann ist natürlich klar das du auftretende Fehler nicht finden kannst :P
    Nicht falsch verstehen: kopieren ist gut, aber eben nur solange man weiß was man tut (oder es nach ausgiebiger Analyse des Kopierten weiß)



    Ausgehend von deinem letzten Beispiel wäre die funktionierende Lösung etwa:
    <linearLayout orientation vertical xmlns=...>
    <textview id text1 singleline>
    <textview id text2 singleline>
    </linearlayout>

    Kann sein das es für Spinner ein fertiges 2-Zeilen Layout gibt, aber normalerweise kannst du dir das genau wie bei Listen ganz einfach selber machen/setzen.
    Solange du kein passendes Layout und damit eine funktionierende from - to Abbildung hast, kann das ganze halt nicht funktionieren.

    Dein ListView bezieht sich auf den Spinner und der Spinner auf dein ListView -> Circular dependencies


    Entferne den überflüssigen(*) Bezug beim ListView, dann sollte es passen.


    (*) Du definierst bereits, das die Liste am oberen Rand sein soll, und im Spinner definierst du, das der unter der Liste sein soll, das ist genug ;)

    Je nach Anforderungskatalog wäre eine denkbare Alternative eine Art Offline-Sync:
    ist das Gerät in der Firma, dann wird eine Sync-Applikation (unter Windows) gestartet, die alle benötigte aus eurer MySQL DB liest und daraus eine SQLite DB erstellt; diese wird dann auf das Gerät übertragen (.exe -> WLAN -> Deine App, oder .exe -> adb -> Gerät).
    Wird nur lesender Zugriff benötigt, dann bist du hier fertig, soll die App auch Daten erfassen/ändern/löschen können, dann muss eine Sync.exe halt auch aus der SQLite lesen und in die MySQL schreiben können.


    Die Vor- und Nachteile dieses Verfahrens sind offensichtlich, und je nach Pflichtenheft kommt diese Variante vielleicht gar nicht in Frage (etwa wenn der von Marco beschriebene Echtzeit-Zugriff gegeben sein muss)

    Ich bin nicht sicher, das ich dein Problem verstanden habe...


    Aber mal drauf los interpretiert hast du die betreffende Activity derzeit auf Portrait festgelegt, d.h. es passier gar nichts, wenn der User das Gerät auf die Seite dreht?


    Zitat

    Wird diese ins Querformat gedreht soll automatisch die Ansicht wechseln und statt der Liste ein Diagramm angezeigt werden. Wie lässt sich das erreichen, wenn die Activity eigentlich nur aufs Hochformat eingerichtet ist?


    Mit Bordmitteln ;)
    Auf dem Tablet soll in beiden Ausrichtungen eine Liste gezeigt werden: entsprechende Layouts in layout-large & layout-large-land speichern
    Auf dem Handy soll in Portrait eine Liste gezeigt werden: Layout in layout speichern
    In Landscape soll statt der Liste eine Grafik gezeigt werden: Layout in layout-land speichern


    Wenn das nicht dein Problem war, müsstest du Formulierungen wie "nur fast ausschließlich", "(fast) nur" und "eigentlich nur" konkreter formulieren.

    Zitat

    "HIER DEN CODE"


    Probiers aus, und falls es nicht funktioniert, lies noch mal meine letzten Postings :)



    Zitat

    Wie kann man das kleiner/übersichtlicher halten?


    Du könntest die Listener zusammenfassen:
    class ... extends Activity implements OnClickListener
    ...
    red.setOnClickListener(this);
    ...


    @Override
    public void onClick(View v) {
    switch (v.getID()) {
    case R.id.button2: ...
    }
    }


    Solange du nur mit Activity unterwegs bist, kannst du auch das onClick Attribut in deiner .xml benutzen.

    Zitat

    rein theoretisch alles dabei lassen wenn ich die Button bzw. das Layout auf/in der activity_main.xml ausarbeite oder?


    Theoretisch würde das wohl zu einer Lösung führen, aber wie man mit Fragments umgeht wüsstest du dann immer noch nicht :P



    Zitat

    Ich hoffe dich stört es nicht, dass ich so viel frage


    Nicht, solange ich den Eindruck habe das du bei der Sache bist.

    Zitat

    Button3 befindet sich in der "fragment_main.xml".
    In der xml
    inwiefern Kontext?


    Hm, vielleicht mal in anderen Worten:
    Was willst du erreichen? --> Listener an Button hängen
    Wie geht das?
    -> wo ist der Button --> hast du schon herausgefunden: fragment_main
    -> wo im Source habe ich Zugriff auf fragment_main?
    --> hier schon mal nicht, wie du bereits herausgefunden hast: setContentView(R.layout.activity_main);
    (meine Azubis würde ich jetzt erklären lassen, warum das dort nicht geht, vielleicht beantwortest du dir diese Frage für dich, um zu testen, ob du die Dinge soweit verstanden hast)
    --> aber hier vielleicht: View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    --> falls ja, wie genau?
    ...


    Im Grunde ist das nur strukturiertes Denken :)


    BTW: wenn du lieber den Fisch als die Fähigkeit des Angelns hättest, musst du das nur sagen ;)

    Zitat

    Dieses?


    Nicht raten.
    Das mag dir diesmal eine funktionierende Lösung bescheren, aber beim nächsten mal hagelt es wieder Abstürze.


    -> findViewById(R.id.button3)
    Wo befindet sich button3?
    An welcher Stelle kann das Objekt also gefunden werden?
    Wie stellst du den geeigneten Kontext für findView her?


    Welcher Teil meiner Erklärung war denn unverständlich und warum?

    Dein find... Aufruf steht im onCreate der Activity;
    das dort sichtbare Layout wird durch setContentView() definiert;
    im so gesetzten Layout (activity_main) wird sich vermutlich nur ein FrameLayout oder sowas befinden, aber keine Buttons etc.


    Dein Code lädt dann ein Fragment, das wiederum sein eigenes Layout setzt (ersetzt die Fläche, die vom FrameLayout definiert wird);
    darin befinden sich die gewünschten Buttons;
    Wenn du die also mit Listenern ausstatten möchtest, dann musst du das im Fragment machen, und nicht in der Activity;
    der funkionierende Context wäre in deinem Fall rooView.find... nach dem Inflaten des entsprechenden Layouts.


    Verständlich erklärt?