Italian HELP TextWriter non funziona su android 14

Xfood

Expert
Licensed User
Buongiorno a tutti,
mi sono imbattuto su un dispositivo con android 14,
e con mia sorpresa mi sono accorto che TextWriter non funziona,
non da nessun errore, ma non scrive nulla
il mio codice che uso da anni e questo:

B4X:
Dim WriterFileTxt As TextWriter
WriterFileTxt.Initialize(File.OpenOutput(File.DirInternal,"\ordine.txt",False))

        qta=Cursor.GetString("qta").Trim
        codice=Cursor.GetString("Ean").Trim
        Dim LunghezzaEan As Int = codice.Length
        Stringa=codice & " " & Qta & CRLF
        WriterFileTxt.Write(Stringa)
        WriterFileTxt.Flush
        WriterFileTxt.close
qualche idea del perche non genera il file?
qualche alternativa a TextWriter

chiaramente ciclo un db di dati che potrebbe contenere da pochi record a migliaia di record

Dim WriterFileTxt As TextWriter
 

Sagenut

Expert
Licensed User
Longtime User
Magari non è il problema, ma lo "\" nel nome del file è necessario?
 

Sagenut

Expert
Licensed User
Longtime User
Il massimo che ho potuto fare è una prova con l'emulatore e funziona.
 

Xfood

Expert
Licensed User
Metti un breakpoint sulla prima riga (che hai riportato) e prosegui con F8, una istruzione per volta.


P.S. do per scontato che tu abbia controllato bene che il file non venga creato.
Si ho controllato, il fine non esiste
Sto uscendo matto, da 2 giorni
 

LucaMs

Expert
Licensed User
Longtime User
Si con l'emulatore funziona, con dispositivo nn o
Emulatore Android 14 (beati voi, quale?)?

Non sarà che nell'emulatore VEDI la dirInternal e del dispositivo no (e ovviamente guardi altrove)?

Sicuro che quello dell'emulatore non sia un vecchio file?

Visto che non "appendi", prova a cancellare il file, prima di scrivere (lo crea).
 

Xfood

Expert
Licensed User
TextWriter File.Writestring / Writelist / Readstring / Readlist ✅
File.writestring, posso appendere più linee?
Il problema e che non vorrei creare una variabile stringa con 5.000 righe,
Ma scrivere una riga per volta..
 

Xfood

Expert
Licensed User
Ma hai aperto l'outputstream con Append = False!
No, non ho fatto la prova con writestring,
Ho sempre pensato che servisse pre scrivere un file tutto di un fiato, non in modalita' append riga per riga, oggi provo
Su android 14 e vediamo
 

Xfood

Expert
Licensed User
Si, ha sempre funzionato con append=false,
Ma con texwrite, mai usato
File.writestring
 

Xfood

Expert
Licensed User
il codice originale che ha sempre funzionato,
su andorid 10 in giu e questo
B4X:
ho cambiato da   [B]File.DirDefaultExternal[/B] a      [B]File.DirInternal[/B]
Private Sub BtnTrasmetti_Click
    Dim WriterFileTxt As TextWriter
    Dim qta As String
    Dim codice As String
    Dim cPathFileOut As String
    Dim cPathOut As String
    Dim FineLinea As String=Chr(0x0d)&Chr(0x0a)
    Dim Stringa As String
    Dim fox As StringFunctions2
    Dim cdata As String
    DateTime.DateFormat = "yyyyMMddHHmmss"
    cdata=DateTime.Date(DateTime.Now)

    MyProgressDialogShow("Elaborazione ... ",$"Attendere   ${CRLF} Estrazione Dati in Corso ... "$)
    

    
    fox.Initialize
    B4XPages.MainPage.SQLDataDB.Initialize(File.DirDefaultExternal, "Db_pdt.db", True)
    Dim Cursor As Cursor
    Cursor = B4XPages.MainPage.SQLDataDB.ExecQuery("SELECT * FROM Ordine ORDER BY id DESC")
    
    
    ' Da sistemare Dopo
    'cPathFileOut=File.DirInternal & "/download/"
    cPathFileOut=File.DirDefaultExternal ' & "/download/"
    'cPathOut= cdata & "_ORDINE.OUT"
    cPathOut= "ORDINE.OUT"
    
    
    If Cursor.RowCount > 0 Then
        WriterFileTxt.Initialize(File.OpenOutput(cPathFileOut, cPathOut,False))
        Stringa="O" & fox.Pad(MappaParametri.Get("CodNegozio"),6,"0",False) & fox.Replicate("+",11)
        Stringa=Stringa & FineLinea
        WriterFileTxt.Write(Stringa)
        WriterFileTxt.Flush
    Else
        B4XPages.MainPage.SQLDataDB.Close
        Cursor.Close
        MainDialog.Title = "ATTENZIONE"
        MainDialog.TitleBarColor= 0xFF1200D0
        MainDialog.BackgroundColor =0xFFFFFFFF
        MainDialog.BodyTextColor=0xFF000000
        MainDialog.ButtonsColor = 0xFF1200D0
        MainDialog.BorderColor = 0xFF000000
        MainDialog.BorderWidth=2dip
        MainDialog.ButtonsTextColor = 0xFFFFFFFF
        Dim rs As Object = MainDialog.Show("Nessun Record Presente", "Ok", "", "")
        AnimateDialog(MainDialog, "left")
        Wait For (rs) Complete (risultato As Int)
        
            Dim toast As CustomToast
            toast.Initialize(Root)
            toast.Show("Archivio Vuoto")
            Sleep(10)
            Return
      End If
    For i = 0 To Cursor.RowCount - 1
        Cursor.Position = i
        qta=Cursor.GetString("qta").Trim
        codice=Cursor.GetString("Ean").Trim
        Dim LunghezzaEan As Int = codice.Length
        Stringa=""
        Select LunghezzaEan
            Case 1,2,3,4,5
                Stringa=fox.PAD(codice,6,"0",False) & fox.AddSpaces(6) & fox.PAD(qta,4,"0",False)
            Case 6
                  Stringa = "00"& codice & fox.AddSpaces(5) & fox.PAD(qta,4,"0",False)
            Case 7
                Stringa=fox.PAD(codice,7,"0",False) & fox.AddSpaces(5) & fox.PAD(qta,4,"0",False)
            Case 8
                Stringa=codice & fox.AddSpaces(5) & fox.PAD(qta,4,"0",False)
            Case Else
                Stringa=fox.PAD(codice,12,"0",False) & fox.PAD(qta,4,"0",False)
        End Select
        Stringa=Stringa & FineLinea
        WriterFileTxt.Write(Stringa)
        WriterFileTxt.Flush
        
        Log(Stringa)
        
    Next
    B4XPages.MainPage.SQLDataDB.Close
    Cursor.Close
    WriterFileTxt.close
    'sf.Pad("Jimmy Joe", "+", 20, False))
    lblText.Text="Tipo Trasferimento " & MappaParametri.Get("tipotrasferimento")
    MyProgressDialogHide

    Log("COPIA FILE")
    Log(cPathFileOut)
    Log(cPathOut)
    Log(cPathFileOut)
    Log(cdata & "_" & cPathOut)
    Log("--------------------------------------")
    File.Copy(cPathFileOut,cPathOut,cPathFileOut,cdata & "_" & cPathOut)
    
    Dim comunicazioni As Trasferimenti
    comunicazioni.Initialize(Root,"Ritorno")
    Dim METODO As String
    comunicazioni.Modo="INVIA"
    comunicazioni.Nomefile=cPathOut
    
    METODO= B4XPages.MainPage.MappaParametri.Get("tipotrasferimento")
    
    If METODO="FTP" Then
        comunicazioni.ftp_Trasferimento
        Wait For(comunicazioni.ftp_Trasferimento) Complete (Result As Boolean)

        If Result=False Then
            MsgboxAsync("Trasferimento su Server FTP FALLITO","ERRORE")
        Else
            ' LANCIO UNA COPIA DI BACKUP
            Dim tmpPath As String =B4XPages.MainPage.MappaParametri.Get("PTHDATIOUTFTP")
            B4XPages.MainPage.MappaParametri.Put("PTHDATIOUTFTP",tmpPath & "SAV/")
            comunicazioni.Nomefile=cdata & "_" & cPathOut
            Wait For(comunicazioni.ftp_Trasferimento) Complete (Result As Boolean)
            B4XPages.MainPage.MappaParametri.Put("PTHDATIOUTFTP",tmpPath)
            ' fine copia di backup
            MsgboxAsync("Trasferimento su Server FTP completato correttamente","FUNZIONE OK")
            B4XPages.MainPage.MappaParametri.Put("PTHDATIOUTFTP",tmpPath)
        End If
    Else If METODO="SMB" Then
        comunicazioni.SMB_TRASMETTI
        Wait For(comunicazioni.SMB_TRASMETTI) Complete (Result As Boolean)

        If Result=False Then
            MsgboxAsync("Trasferimento su Server SMB FALLITO","ERRORE")
        Else
            ' LANCIO UNA COPIA DI BACKUP
            Dim tmpPath As String =B4XPages.MainPage.MappaParametri.Get("PTHDATIOUTSMB")
            B4XPages.MainPage.MappaParametri.Put("PTHDATIOUTSMB",tmpPath & "SAV/")
            comunicazioni.Nomefile=cdata & "_" & cPathOut
            Wait For(comunicazioni.SMB_TRASMETTI) Complete (Result As Boolean)
            B4XPages.MainPage.MappaParametri.Put("PTHDATIOUTSMB",tmpPath)
             ' fine copia di backup
            MsgboxAsync("Trasferimento su Server SMB completato correttamente","FUNZIONE OK")
            B4XPages.MainPage.MappaParametri.Put("PTHDATIOUTSMB",tmpPath)
        End If
    Else If METODO="SHARE" Then
        comunicazioni.Visualizza(File.DirDefaultExternal, cPathOut)
    Else If METODO="CAVO" Then
        MsgboxAsync("Puoi Prelevare il file Collegando il cavo" & CRLF & _
                    "Utilizzando esplora risorse, oppure ADB" & CRLF & _
                    "al seguente percorso : " & CRLF & _
                    File.DirDefaultExternal & "/" & cPathOut,"Avviso")
    End If
    
    
    Sleep(0)
    Log("CANCELLA")
    Log(cPathFileOut)
    Log(cdata & "_" & cPathOut)
    Log("-----------------------------------------------------")
    If File.Exists(cPathFileOut,cdata & "_" & cPathOut) Then File.Delete(cPathFileOut,cdata & "_" & cPathOut)
    Log("CANCELLAZIONE AVVENUTA")   






End Sub
 

Xfood

Expert
Licensed User
Come poteva funzionare se inizializzi WriterFileTxt se Cursor.RowCount > 0 ma, se non lo è, lo usi (WriterFileTxt.Write(Stringa)) senza inizializzarlo?

Righe 33, 78
Si, inizializzo solo e i record sono presenti, altrimenti mando un messaggio a video
Ed esco dalla procedura

Da riga 38, a riga 58
 
Top