Spanish Mi primer APP no logra escribir un archivo CSV

Discussion in 'Spanish Forum' started by Sergio Castellari, May 18, 2019.

  1. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola,

    Estoy realizando mi primera APP, que necesita poder grabar un archivo CSV que fue editado. Pero NO logro poder grabar la edición del archivo CSV.
    Necesito poder grabar la edición ni bien termino de editarlo.
    Adjunto proyecto completo para poder ver donde tengo el error o mejor dicho para ver como debiera hacerlo.
    Saludos,
    Sergio
     

    Attached Files:

  2. José J. Aguilar

    José J. Aguilar Active Member Licensed User

    Hola Sergio:

    Enhorabuena, la app tiene buena pinta.

    A ver, como estás apuntando al sdk 26 en el manifest, deberías echar un ojo al tutorial sobre Runtime Permissions.
    https://www.b4x.com/android/forum/threads/runtime-permissions-android-6-0-permissions.67689/

    Algunas cosillas:
    1.- Si no quieres complicarte con los permisos, deberías bajar en el manifest el SDK 26 a por ejemplo el 19 (si no va a publicar la app el Google Play). Verás que ahí ya al instalar la APP te dirá que la aplicación requiere permisos de escritura. Haciendo esto, ya graba bien el archivo, pero claro, luego debes cargarlo desde esa misma carpeta
    Code:
    su.SaveCSV(File.DirDefaultExternal, "cargas.csv"",", data)
        
    Log("Directorio: " & File.DirDefaultExternal)
    Verás en el log
    Code:
    Directorio: /storage/emulated/0/Android/data/b4a.example/files
    Y efectivamente el csv en esa carpeta ya está modificado

    2.- DirAssets es de solo lectura, no puedes escribir ahí (ya habrás visto que te lanza ese error), por lo que para usar tu csv, deberías copiarlo a otra carpeta y cargarlo y grabarlo ahí.
    3.- Si quieres usar los Runtime Permissions, siguiendo el tutorial, no es complicado
     
  3. José J. Aguilar

    José J. Aguilar Active Member Licensed User

  4. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola José!!!,

    Con tus post, logré entender (minimamente) el tema de permisos. Es decir, utilizo directamente rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
    y pRutaBase = rp.GetSafeDirDefaultExternal("") que lo tomé del post que me pasaste de @Xanatos34, con ello logro leer/grabar el archivo en la carpeta predeterminada del telefono. [con esto aprendi tambien a utilizar variables publicas entre distintos modulos de Actividad]

    También buscando material en el foro (poco a poco me voy acostumbrando a buscar) encontré un tutorial del @Erel sobre la libreria NET para 'descargar' un archivo. Pues bien, he logrado DESCARGAR el archivo y editarlo!!!! EXITO!!! (mi alegría al avanzar es inmensa!!!)

    Pero avanzando en mejorar la APP, no encuentro la manera de verificar ANTES, si el archivo se encuentra en el FTP. Veo que existe una manera de leer carpetas/files del FTP, pero NO me doy cuenta como saber ANTES de descargar, si existe el archivo. Me imagino que se debe aplicar de alguna manera Wait For...pero ni idea como hacerlo.

    Vi este codigo en el foro...
    Dim sf As Object = ftp.UploadFile(File.DirAssets, "somefile", False, "/somefile")
    Wait For (sf) ftp_UploadCompleted (ServerPath As String, Success As Boolean)
    If Success Then
    Log("file was uploaded successfully")
    Else
    Log("Error uploading file")
    End If

    Pero no tengo idea como hacer algo similar para saber si el archivo existe en el FTP y asi descargarlo o indicar un mensaje en contrario...
    Desde ya gracias si puedes indicarme una pista (mientras tanto sigo avanzando en como SUBIR el archivo editado)

    Saludos,
    Sergio
     
  5. José J. Aguilar

    José J. Aguilar Active Member Licensed User

    Buenas de nuevo Sergio:

    Me alegro mucho de que vayas avanzando, la verdad es que da un pequeño subidón cada vez que se consigue hacer algo, y más si cuesta.
    A riesgo de parecer pesado, por favor, abre un nuevo hilo para el problema del FTP de forma que para quien busque en el foro, sea más sencillo encontrar respuestas y que este hilo no se convierta en todas las dudas sobre una APP en concreto.

    Para mostrar código, usa delante y detrás las etiquetas [ code] [ /code] (sin espacios).
    Fíjate en el código que pones, y que el objeto FTP tiene un comando list y un evento FTP_ListCompleted, por lo que supongo (no lo he probado) que deberías intentar algo como:
    Code:
    Dim sf As Object = ftp.list("/ruta del ftp")
    Wait For (sf) FTP_ListCompleted (ServerPath As String, Success As Boolean, Folders() As FTPEntry, Files() As FTPEntry)
    If Success Then
    Log("El archivo existe")
    Else
    Log("Error uploading file")
    End If
    Y en FTP_ListCompleted algo como:

    Code:
    Sub FTP_ListCompleted (ServerPath As String, Success As Boolean, Folders() As FTPEntry, Files() As FTPEntry)
            
    If Success = False Then
                
    Log(LastException)
            
    Else
                
    For i = 0 To Files.Length - 1
                
    'Comprueba aquí sí tu archivo existe
                Log(Files(i).Name)
                
    Next
            
    End If
    End Sub
    Ya quizás alguno de los compañero te pueda decir exactamente cómo va.

    saludos,
     
    Sergio Castellari likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice