Italian Salvataggio dati SQL dopo disinstallazione app

Sagenut

Expert
Licensed User
Longtime User
Ho solo un Activity con la Main
Allora devi fare
File (dal menu in alto) e poi Export as Zip.
Poi alleghi il file zip qui con attach file che trovi in basso quando scrivi in post.
 

Sagenut

Expert
Licensed User
Longtime User
Non capisco perché se scrivo una cosa me la traduce senza chiederglielo.... :(
Forse hai impostato il "Traduci Sempre da a" in Chrome (o quel che usi) per questo sito.
 

latietude

Member
Forse hai impostato il "Traduci Sempre da a" in Chrome (o quel che usi) per questo sito.
Sto diventando B4ADipendente o_O
Ho collegato il telefono al pc tramite cavo usb e ho notato che, fino a quando l'applicazione é installata sul telefono, il database si aggiorna correttamente e rimane visibile nella cartella all'interno del telefono stesso. Se disinstallo l'applicazione sparisce tutto e buonanotte suonatori, per cui fino a qui non é difficile capire che c'è un problema di conservazione dei dati nel momento in cui disinstallo l'app ed é per questo che mi chiedo: come posso evitare che il database sparisca quando la disinstallo? È forse una clausola di Google? Se sì, come fare per implementare l'opzione senza dover utilizzare la riga di codice sull' Editor Manifest: android:hasFragileUserData="true" che ti dà la possibilità di scegliere se conservare i dati oppure no, come per esempio succede con Whatsapp, ma che ti costringe a fare la scelta? Mi piacerebbe capire come fare senza dover far intervenire l'utente.
 

Sagenut

Expert
Licensed User
Longtime User
Da quel che leggo pare che ormai non sia possibile mantenere i dati delle app alla disinstallazione.
A meno che non sia il telefono stesso a mantenere un backup.
Il mio telefono pare eliminare tutto, il che dovrebbe essere la normalità.
Si dovrebbero quindi salvare i files da un'altra parte.
Ma con le limitazioni di Google questo è possibile solo con l'intervento dell'utente.
Che poi dovrebbe anche ricordare dove aveva salvato i files per poterli importare nuovamente.
Al momento quindi non sò che dire.
Quel hasFragileUserData mi sembra che tu lo abbia inserito correttamente, però dovrebbe apparire una finestra dove chiede se si vogliono mantenere i dati utente.
Ma questa finestra non appare.
In compilazione non ci sono errori quindi sembra che il comando sia implementato bene nel Manifest.
 

latietude

Member
Da quel che leggo pare che ormai non sia possibile mantenere i dati delle app alla disinstallazione.
A meno che non sia il telefono stesso a mantenere un backup.
Il mio telefono pare eliminare tutto, il che dovrebbe essere la normalità.
Si dovrebbero quindi salvare i files da un'altra parte.
Ma con le limitazioni di Google questo è possibile solo con l'intervento dell'utente.
Che poi dovrebbe anche ricordare dove aveva salvato i files per poterli importare nuovamente.
Al momento quindi non sò che dire.
Quel hasFragileUserData mi sembra che tu lo abbia inserito correttamente, però dovrebbe apparire una finestra dove chiede se si vogliono mantenere i dati utente.
Ma questa finestra non appare.
In compilazione non ci sono errori quindi sembra che il comando sia implementato bene nel Manifest.
In effetti ho letto che non funziona su tutti i telefoni, sul mio si.
Per cui, secondo te, dovrei rassegnarmi. Chissà se Erel potrebbe aiutarmi.....
 

Attachments

  • Screenshot_20250318-092843.png
    Screenshot_20250318-092843.png
    97.9 KB · Views: 76

Sagenut

Expert
Licensed User
Longtime User
Ormai siamo nell'era del Cloud....... Bisogna salvare in remoto sulle nuvole.
 

latietude

Member
Ormai siamo nell'era del Cloud....... Bisogna salvare in remoto sulle nuvole.
E a che serve se poi Google ti mette altre restrizioni anche li?
Certo che pero' é frustrante....
Io avrei bisogno di sviluppare un app per limitare gli accessi a mio figlio che ha 6 anni e funziona, solo che il furbetto ha capito che se disintalla e reinstalla l'app il contatore torna a zero 😂
 

LucaMs

Expert
Licensed User
Longtime User
Secondo il sor ChatGPT (e non ho un Android 10+ per provare):

B4X:
Sub SalvaDatabase
    Dim rp As RuntimePermissions
    Dim Percorso As String = rp.GetSafeDirDefaultExternal("BackupDati")
    Dim NomeDB As String = "database.db"
    
    ' Verifica se il database esiste già
    If File.Exists(Percorso, NomeDB) = False Then
        Dim SQL As SQL
        SQL.Initialize(Percorso, NomeDB, True)
        
        ' Creazione di una tabella di esempio
        SQL.ExecNonQuery("CREATE TABLE IF NOT EXISTS utenti (id INTEGER PRIMARY KEY, nome TEXT)")
        SQL.ExecNonQuery2("INSERT INTO utenti (nome) VALUES (?)", Array As Object("Mario"))
        
        SQL.Close
        Log("Database creato in: " & File.Combine(Percorso, NomeDB))
    Else
        Log("Database già esistente in: " & File.Combine(Percorso, NomeDB))
    End If
End Sub
B4X:
Sub ApriDatabase
    Dim rp As RuntimePermissions
    Dim Percorso As String = rp.GetSafeDirDefaultExternal("BackupDati")
    Dim NomeDB As String = "database.db"

    ' Controllo se il file esiste
    If File.Exists(Percorso, NomeDB) Then
        Dim SQL As SQL
        SQL.Initialize(Percorso, NomeDB, True)
        
        Dim Cursor As Cursor = SQL.ExecQuery("SELECT * FROM utenti")
        For i = 0 To Cursor.RowCount - 1
            Cursor.Position = i
            Log("Utente: " & Cursor.GetString("nome"))
        Next
        
        Cursor.Close
        SQL.Close
    Else
        Log("Database non trovato!")
    End If
End Sub



1742292869931.png

(Che sia corretto lo dice "lui", di solito ha errori 😁)
 

latietude

Member
Secondo il sor ChatGPT (e non ho un Android 10+ per provare):

B4X:
Sub SalvaDatabase
    Dim rp As RuntimePermissions
    Dim Percorso As String = rp.GetSafeDirDefaultExternal("BackupDati")
    Dim NomeDB As String = "database.db"
   
    ' Verifica se il database esiste già
    If File.Exists(Percorso, NomeDB) = False Then
        Dim SQL As SQL
        SQL.Initialize(Percorso, NomeDB, True)
       
        ' Creazione di una tabella di esempio
        SQL.ExecNonQuery("CREATE TABLE IF NOT EXISTS utenti (id INTEGER PRIMARY KEY, nome TEXT)")
        SQL.ExecNonQuery2("INSERT INTO utenti (nome) VALUES (?)", Array As Object("Mario"))
       
        SQL.Close
        Log("Database creato in: " & File.Combine(Percorso, NomeDB))
    Else
        Log("Database già esistente in: " & File.Combine(Percorso, NomeDB))
    End If
End Sub
B4X:
Sub ApriDatabase
    Dim rp As RuntimePermissions
    Dim Percorso As String = rp.GetSafeDirDefaultExternal("BackupDati")
    Dim NomeDB As String = "database.db"

    ' Controllo se il file esiste
    If File.Exists(Percorso, NomeDB) Then
        Dim SQL As SQL
        SQL.Initialize(Percorso, NomeDB, True)
       
        Dim Cursor As Cursor = SQL.ExecQuery("SELECT * FROM utenti")
        For i = 0 To Cursor.RowCount - 1
            Cursor.Position = i
            Log("Utente: " & Cursor.GetString("nome"))
        Next
       
        Cursor.Close
        SQL.Close
    Else
        Log("Database non trovato!")
    End If
End Sub



View attachment 162713
(Che sia corretto lo dice "lui", di solito ha errori 😁)
Appena posso ci provo e se funziona ti devo una cena
 

Sagenut

Expert
Licensed User
Longtime User
Mi pare di aver già provato e non sopravvive, per il semplice motivo che la directory si trova all'interno della stessa cartella della app che viene rimossa.
 

Sagenut

Expert
Licensed User
Longtime User
Nel dubbio riprovo.
Dovrei avere Android 11
 

Sagenut

Expert
Licensed User
Longtime User
Mi spiace per ChatGPT ma, almeno da me, la cartella della app viene potata interamente.
Quindi si porta via tutto, come previsto.
 

Sagenut

Expert
Licensed User
Longtime User
Ancora niente di fatto.
Interessante però il poter creare una cartella sotto MEDIA anzichè sotto DATA.
E ci si riesce senza permessi.
Però poi, sempre da me, in fase di disinstallazione si porta via anche quella cartella.
Che manchi qualcosa nel Manifest per dirgli di non toccarla?
 
Top