Beiträge von herrm_no

    Hey


    also es läuft jetzt unter Android 6.
    Nun aber ein anderes Problem. Wenn ich Android 5 ebenso verwenden möchte und die Version wieder umstelle, dann funktioniert es ja wieder nicht - bzw. "checkSelfPermission" und "requestPermissions" geht nicht mehr = Fehler beim Debug
    Gibt es da eine Möglichkeit für Android 6 den einen Weg und für Android 5 einen anderen in der selben App zu verwenden.



    ich habe die Version hier umgestellt - ich hoffe das ist der richtige Weg



    Code
    if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
            {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
            }


    Ich versuche von meiner Datenbank ein Backup zu schreiben.
    dabei habe ich nun zwei Probleme
    1) ich versuche ein Directory zu erzeugen storage/emulated/0/test.
    Das lässt er schon gar nicht zu.
    2) dann geht es natürlich auch nicht ein database.db file in dieses Directory zu schreiben. Auch in das existierende storage/emulated/0 kann ich nicht schreiben.
    Was ist denn da der Grund.
    Ich habe keine Hardware mit dem Laptop verbunden sondern simuliere mit z.B. Nexus 7 API 23.
    sd.canWrite bringt mir dann auch "false".
    Mit dem AndroidDeviceMonitor kann ich z.B. schon manuell ein Directrory erzeugen.
    Fehlt da noch was oder ....
    Gruß


    Code
    File sd = new File(Environment.getExternalStorageDirectory()+"/test");
            if(!sd.exists()){
                sd.mkdirs();
            }
    //        
                try {
    
    
                    if (sd.canWrite()) {
                        //String currentD

    das verstehe ich nicht ganz.
    was der custom_progress ist verstehe ich nocht, aber wie verwende ich den für den Hintergrund.
    Ich brauche doch den speziellen Rahmen mit den Texten (siehe weiter oben als Bild)
    Und verschiedene LED's in einer Custom Bar (z.B. Position1 Rot, Position 2 Grün, Position 3 Gelb) als Thumb.
    Kannst du mir deinen Tip mal genauer erklären.
    Bzw. wie soll die custom_progress.xml dazu aussehen
    Ich bin immer noch am finden einer Lösung. Probier nun auch schon seit Stunden. Ich geb aber nicht auf !

    Hier die Layout datei von der Seekbar. Ist zwar ein Constraint Layout, aber die Seekbar ist zum test nirgendwo positioniert.
    Also Position 0/0

    Im drawable Ordner habe ich noch die custom_progress.xml
    Diese erfüllt das was sie soll.


    Code
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- ohne alles, dadurch keine Progress Tint = Linie -->
    </selector>

    Also ich hab jetzt mal etwas anderes getestet.
    Ich habe die Custom Seekbar einfach mal vergrössert (ohne Constraints vom Constraint Layout)
    Beim vergrössern wird die Thumb nicht im selben Masstab vergrössert wie der Background.
    Also verschiedene Grössen der Seekbar im selben Layout passen nicht zu der "Thumb".
    Das ist jetzt sicher der Grund.
    Nur wie löse ich dieses Problem ?
    !! Den text Kontrolle nicht beachten !!!

    scaleType
    was meinst du denn damit?
    bei den Seekbar Properties gibt es nur ScaleX und ScaleY - diese sind leer.
    oder meinst du das hier.
    Augenblicklich verwende ich das aber nicht für die Seekbar. Hatte ich schon, hat auch erst mal nichts gebracht.
    Zur Zeit ist die Custom Seekbar Grafik (Hintergrund und Thumb) nur im drawable folder (nicht in hdpi,xhdpi usw).
    Muss aber sagen, dass ich ein Constraint Layout erstellt habe. Das sollte aber hoffentlich nicht der Grund sein.

    Wie immer vielen dank für deine Antworten.
    Tut mir leid, dass meine Antwort so lange gedauert hat, aber ich hatte etwas viel Arbeit und keine Zeit für die App / Hobbies
    Ich hab es zwar jetzt scheinbar hinbekommen (hab den Code etwas optimiert). Kann aber echt nicht sagen warum es jetzt geht.
    Ich werde nun erst mal alle kleinen Fehler noch beheben und das Programm fertig stellen.
    Danach muss ich mich doch nochmal auf die Datenbank stürzen.
    Da gibt es sicher waaaahnsinnig viel zu verbessern.
    Gruß

    Hallo
    ich habe eine Custom Seekbar. Der Thumb ist eine "LED". Das funktioniert auch alles ganz gut.
    Wenn ich allerdings verschiedene Handys bzw Tablets simuliere, dann Scaliert die Thumb (LED) anders als der Hintergrund.
    Wie kann ich so was beheben
    Die LED ist auch von den Pixeln her genau so groß erstellt, dass sie in den Hintergrund vom Massstab 1:1 passt.
    Ich hab auch mal mit dem Tool "Batch Drawable Import" verschiedene Formate für mdpi,hdpi,xhdpi usw. erzeugt. Ist zwar besser aber nicht optimal.
    Gruss
    herrm_no
    Hier mal 3 Beispiele
    Nexus5


    Nexus 7


    Galaxy Note 10

    Also irgendwie versteh ich das ganze jetzt nicht mehr. Ich emuliere mit mehreren "Handys" oder auch Hardware Handys.
    Einmal erstellt er keine leere Datenbank manchmal schon. Hab irgendwie doch noch nicht rausgekriegt was der Grund dafür ist.


    Also zum Code
    ich habe zwei Klassen in der Main Activiy definiert

    Code
    DataBaseHelper myDBHelperClass = new DataBaseHelper(this);
    DataBaseHelperAssets myDBHelperAssetsClass = new DataBaseHelperAssets(this);




    dann überprüfe ich ob die database.db schon existiert oder nicht. Wenn nicht kopiert er die Datenbank vom Assets Folder in den "APK" Folder.
    Danach hole ich mir noch die Assets Datenbank als kopie in den "APK" Folder > um später beide zu vergleichen - das funktioniert auch super.



    in myDBHelperClass.copyDataBase("NEWCREATE") überprüfe ich sofort ob database.db schon vorhanden ist > mit "checkDataBase"
    Und genau da sagt er mir schon das sie vorhanden ist (allerdings ohne Inhalt) dbFile.exists() = true.
    Jetzt frag ich mich wo diese leere Datenbank herkommt. (leer bedeutet, alle Columns sind da aber keine Zeilen)
    Wenn ich die App deinstalliere und danach schritt für schritt simuliere, dann kann die doch noch gar nicht da sein ????
    Wie gesagt, ich hab gedacht ich weis wie ich es immer nachvollziehen kann aber dann auf einmal war alles wieder nicht so wie gedacht.



    Code
    public boolean checkDataBase()
        {
    
    
            File dbFile = new File(DB_PATH + "/"+ DB_NAME);
            return dbFile.exists();}


    Pfad definition in DataBaseHelper Class

    Code
    private static String DB_PATH = "/data/data/com.herrm_no.tt_training/databases";
      private static String DB_NAME = "database.db";// Database name

    Hallo hier bin ich mal wieder.
    Habe wieder mal ein kleines Problem mit der Datenbank.
    es funktioniert eigentlich alles ganz gut bis auf -


    Ich starte das Programm mit einer angeschlosser Hardware (LG G4)
    Mein programm ist nicht installiert (war zwar schon aber jetzt deinstalliert)
    Wenn ich es nun mit Android Studio schritt für schritt debugge und nach der Datenbank abfrage, dann sagt mit die Variable check = true (????)

    Code
    boolean check = checkDataBase();
    ....
    private boolean checkDataBase()
        {
            File dbFile = new File(DB_PATH + "/"+ DB_NAME);
            return dbFile.exists();
    }


    Wenn ich aber vorher die Datenbank lösche (was ich natürlich nicht will)

    Code
    myDBHelperClass.DeleteDatabase("Master");
    .....
    
    
    boolean DeleteDB1OK = myContext.deleteDatabase(DB_PATH + "/"+ DB_NAME);

    dann funktioniert auch alles wieder.
    Ich kann dann die Löschfunktion wieder raus nehmen und das Programm funktionert immer noch perfekt.
    Erst bei einer Deinstallation fängt das Problem wieder von vorne an.
    (Nach der Installation und beim ersten start versuche ich die Datenbank vom Assets Ordner in den databases Ordner zu kopieren.)
    Ich kann leider auch nicht auf die Datenbank im LG hinnavigieren um zu sehen was da faul ist, da ich keine Superuser rechte auf dem Handy habe und auch nicht aktivieren möchte.
    Bei der Simulation mit einem Virtuellen Handy hab ich das irgendwie noch nicht hinbekommen - ist auch irgendwie komisch - werde es aber nochmal teste
    Hat schon mal jemand das selbe Problem gehabt ???




    Gruß
    herrm_no

    Danke. Bin ja irgendwie froh, dass es bei dir auch nicht geklappt hat. Hab echt lange rumprobieren und war schon am verzweifeln warum ich es nicht hinbekomme Werde es dann so machen wie du vorgeschlagen hast. Gruß

    Vielen Dank für den Code. Da sind mir nun wieder ein Paar Lichter aufgegangen.
    Aber ein Problem bleibt immer noch, und das ist mitunter ein Problem wo ich schon lange nach der Lösung suche.

    Code
    private static final String DatenBankName = getAssets()+"Db.db";

    Nämlich nach dem "DatenBankName ".
    getAssets() funktioniert nicht. Das ist im Code "ROT" .
    Warum hat das bei dir funktioniert und bei mir nicht. Das ist ja nicht nur ein Name sondern ein "Vereichnis" + File. Ich habe schon versucht nur
    "assets/databases/database.db" herzunehmen (wo es bei mir auch abgelegt is.)
    (ohne getAssets()), das funktioniert aber auch nicht. Ich hab auch mal .db weggelassen und und und.


    Der Debugger bricht dann bei db = this.getWritableDatabase() ab. Ist ja auch klar, weil er scheinbar nichts findet.
    So, jetzt ist es 0:30 - jetzt ist Schluss :)

    Also das ist mir jetzt schon hoffentlich alles klar, aber mein Problem ist immer noch wie ich einen Cursor auf die
    Datenbank im Assets Folder bringe. (Zeile 6 )
    Ich habe nirgendwo gefunden wie ich direkt die ***assets/databases/database.db "öffnen" kann.
    Das mit den ???? ist jetzt nur Platzhalter. Kanns du mir da vielleicht mal einen Code schnippsel Zeigen wie du das machst.


    Code
    String  selectQuery = "SELECT  * FROM " + TABLE_NAME;
    
    
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    
    
    SQLiteDatabase dbAssets = ????.getWritableDatabase();
    Cursor cursorAssets = dbAssets.rawQuery(selectQuery, null);

    Ich habe heute ewig gekämpft um das mit dem Upgrade (überschreiben einer neueren Assets db Version mit der user db Version.
    Ich habe lange gesucht wie man die db Version der Assets Datenbank herausfindet - geht scheinbar nicht. Dann hatte ich immer das Problem das ich die neue Datenbankversion zwar kopiert hatte aber dann die app immer abgebrochen hat. Wusste nicht das man auch die Version

    Code
    super(context, DATABASE_NAME, null,DATABASEVERSION );

    hier auch extra noch korrekt einstellen muss. Also das kostet echt Nerven.


    Nun aber habe ich ein neues Problem. Ich finde einfach keine Möglichkeit wie man in einem Assets Ordner die Datenbank öffnet und sie an einem Cursor übergibt. > wollte deinen Vorschlag übernehmen.
    Ich hab mir gedacht vielleicht speichere ich die Aktuelle Datenbank zwischen, kopiere dann die Assets Datenbank (überschreibe die Aktuelle) und mixe beide und hab dann eine Neue. Aber das haut auch irgendwie nicht hin. Diese Scheixx Datenbank regt mich echt langsam auf.

    Ok, ich werde das mit der Abfrage und dem einfügen so probieren.
    Das mit den ids das die nacheinander sind hat den Grund, da ich Buttons für Vorwärts und Rückwärts habe. Da kann ich die Daten nicht Kreuz und Quer einfügen.
    Ich tu mich damit auch glaub ich leichter zu entscheiden was von mir mitgegeben wird und was vom user schon dazugefügt wurde.
    Natürlich ist es wurscht ob die ID1,ID3,ID4,ID20 von mir so kommt und der User ab ID1000,ID1001,ID1012 seine Daten hinzufügt.
    Ich hab dann nur das Problem wenn ich durch viele Updates irgendwann mal bei meinen mitgegebenen Daten bei ID999 lande.
    Deshalb der Grund alles nacheinander.(weil 999 einzelne Zeilen werde ich nie und nimmer als info mitgeben)
    Aber ich werde jetzt doch nochmal einiges durchlesen. Vielleicht hab ich immer noch was nicht richtig verstanden und dann macht es hoffentlich klick.
    Danke nochmal. Falls ich doch Probleme mit der Umsetztung habe melde ich mich nochmal.


    Gruß