Spanish Cancela el programa despues de aceptar un Dialog

Discussion in 'Spanish Forum' started by Sergio Castellari, Jul 12, 2019 at 12:08 AM.

  1. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola,

    Tengo el siguiente codigo:
    Code:
    Sub ListView1_ItemClick (Position As Int, Value As Object)
       
    If Position = "0" Then  'IMPORTAR Toma Estado
           rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
       
    End If
       
    If Position = "1" Then  'EDITAR Toma Estado
           If File.Exists(pRutaBase & "/" & pFTPfileLoc, "") = False Then
               MsgboxAsync(
    "No se encuentra el Toma Estado en el dispositivo. Es necesario IMPORTARLO primeramente.""EDITAR Toma Estado")
           
    Else
               
    StartActivity(TomaEstado) 'LLamo modulo TomaEstado
           End If
       
    End If
       
    If Position = "2" Then  'EXPORTAR Toma Estado
           ProgressDialogShow("Subiendo archivo...ESPERE...")
           
    Dim sf As Object = FTP.UploadFile(pRutaBase, pFTPfileLoc, False, pFTPruta & "/" & pFTPfileLoc)
           
    Wait For (sf) ftp_UploadCompleted (ServerPath As String, Success As Boolean)
           
    ProgressDialogHide
           
    If Success Then
               
    Log("Borrado de archivo original: " & pRutaBase & "/" & pFTPfileLoc)
               
    File.Delete(pRutaBase, pFTPfileLoc)
               
    Log("Archivo subido EXITOSAMENTE !!!")
               
    ToastMessageShow("Archivo subido EXITOSAMENTE !!!"False)
           
    Else
               
    Log("ERROR al <Subir> archivo")
               MsgboxAsync(
    "ERROR!. No se pudo subir el archivo de Toma Estado. Inténtelo nuevamente.""Error al <Subir> archivo")
           
    End If
       
    End If
       
    If Position = "3" Then  'Parametrizar APP
           ToastMessageShow("You have selected the number 4 position in the list"True)
       
    End If
       
    If Position = "4" Then  'Salir de la APP
           ToastMessageShow("...saliendo de la aplicación..."False)
           
    Activity.Finish
       
    End If
    End Sub
    Utilizo un menu 'Drawer'...(creo que es correcto como lo anuncio)...donde en la opcion 2 (If Position ="1"...), si no encuentra el archivo, visualiza el mensaje correctamente...pero luego la aplicacion de cierra y sale. No entiendo el porque, ya que en la opcion 4 (position = "3", muestra correctamente el mensajito y luego vuelve al menu principal (Drawer), que lo que debiera hacer en el primer caso.

    ¿ Que debo colocar despues del MsgboxAsync() para que vuelva al menu principal ?

    Saludos,
    Sergio
     
  2. Enrique Gonzalez R

    Enrique Gonzalez R Well-Known Member Licensed User

    No te aparece nignun log de error en el ide?
     
    Sergio Castellari likes this.
  3. Descartex

    Descartex Well-Known Member Licensed User

    Muy buenas.
    En primer lugar, mi consejo es que, siempre que tengas que evaluar con If la misma expresión, utilices "Select", es mucho más rápido, puesto que cuando termina su caso, sale y no evalúa el resto de If's.
    En tu caso quedaría algo asi:
    Code:
    Sub ListView1_ItemClick (Position As Int, Value As Object)
       
    Select Position
           
    Case "0" 'IMPORTAR Toma Estado
                rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
           
    Case "1" 'EDITAR Toma Estado
               If File.Exists(pRutaBase & "/" & pFTPfileLoc, "") = False Then
                   MsgboxAsync(
    "No se encuentra el Toma Estado en el dispositivo. Es necesario IMPORTARLO primeramente.""EDITAR Toma Estado")
               
    Else
                   
    StartActivity(TomaEstado) 'LLamo modulo TomaEstado
               End If
           
    Case "2" 'EXPORTAR Toma Estado
               ProgressDialogShow("Subiendo archivo...ESPERE...")
               
    Dim sf As Object = FTP.UploadFile(pRutaBase, pFTPfileLoc, False, pFTPruta & "/" & pFTPfileLoc)
               
    Wait For (sf) ftp_UploadCompleted (ServerPath As String, Success As Boolean)
               
    ProgressDialogHide
               
    If Success Then
                   
    Log("Borrado de archivo original: " & pRutaBase & "/" & pFTPfileLoc)
                   
    File.Delete(pRutaBase, pFTPfileLoc)
                   
    Log("Archivo subido EXITOSAMENTE !!!")
                   
    ToastMessageShow("Archivo subido EXITOSAMENTE !!!"False)
               
    Else
                   
    Log("ERROR al <Subir> archivo")
                   MsgboxAsync(
    "ERROR!. No se pudo subir el archivo de Toma Estado. Inténtelo nuevamente.""Error al <Subir> archivo")
               
    End If
            
    Case  "3"  'Parametrizar APP
                ToastMessageShow("You have selected the number 4 position in the list"True)
           
    Case  "4"  'Salir de la APP
                ToastMessageShow("...saliendo de la aplicación..."False)
                
    Activity.Finish
       
    End Select
    End Sub
    En segundo, debes acostumbrarte a postear también lo que te tira el log, para saber si te está dando algún error.
    Un saludo.
     
    Sergio Castellari likes this.
  4. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola @Enrique Gonzalez R ,

    Disculpa...no me di cuenta de enviar el log. Aqui lo pego:

    Registo conectado a: samsung SM-J710MN
    --------- beginning of main
    *** Service (starter) Create ***
    ** Service (starter) Start **
    ** Activity (main) Create, isFirst = true **
    ** Activity (main) Resume **
    Error occurred on line: 0 (Main)
    java.lang.Exception: Sub msgbox_result signature does not match expected signature.
    public static void b4a.example.main_subs_0._msgbox_result() throws java.lang.Exception

    class java.lang.Integer,
    *** Service (starter) Create ***
    ** Service (starter) Start **
    ** Activity (main) Create, isFirst = true **
    ** Activity (main) Resume **
    Error occurred on line: 0 (Main)
    java.lang.Exception: Sub msgbox_result signature does not match expected signature.
    public static void b4a.example.main_subs_0._msgbox_result() throws java.lang.Exception

    class java.lang.Integer,

    Saludos y gracias,
    Sergio
     
  5. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola @Descartex !!!

    Gracias por tu ayuda...no sabía del uso de Select y mucho menos del comportamiento...
    Copie tu codigo reformado y hace lo mismo.
    Aqui te pego el log de errores:

    Registo conectado a: samsung SM-J710MN
    --------- beginning of main
    *** Service (starter) Create ***
    ** Service (starter) Start **
    ** Activity (main) Create, isFirst = true **
    ** Activity (main) Resume **
    Error occurred on line: 0 (Main)
    java.lang.Exception: Sub msgbox_result signature does not match expected signature.
    public static void b4a.example.main_subs_0._msgbox_result() throws java.lang.Exception

    class java.lang.Integer,
    *** Service (starter) Create ***
    ** Service (starter) Start **
    ** Activity (main) Create, isFirst = true **
    ** Activity (main) Resume **
    Error occurred on line: 0 (Main)
    java.lang.Exception: Sub msgbox_result signature does not match expected signature.
    public static void b4a.example.main_subs_0._msgbox_result() throws java.lang.Exception

    class java.lang.Integer,

    Saludos,
    Sergio
     
  6. Descartex

    Descartex Well-Known Member Licensed User

    Buenas!!!
    Como te indica el log de errores, tienes un problema con el msgbox_result, no está debidamente configurado.
    La pregunta que me asalta es: ¿Por qué usar el MsgBoxAsync pudiendo utilizar el MsgBox normal?

    Revisa el código del Sub que controla el Result del MsgBox y deberia solucionarse.
    Un saludo.
     
    Sergio Castellari likes this.
  7. Enrique Gonzalez R

    Enrique Gonzalez R Well-Known Member Licensed User

    por nada en especial pero asi lo recomienda Erel pero par este caso en especifico, parece que como no tiene su contraparte wait for, esta fallando por lo que tienes razon, probablemente ayude poner msgbox
     
    Sergio Castellari likes this.
  8. Rubsanpe

    Rubsanpe Member Licensed User

    Correcto, en las versiones async (no bloqueantes) se debe utilizar wait for para esperar la respuesta del usuario

    MsgboxAsync(...
    Wait For MsgBox_Result (Result As Int)
    If Result = DialogResponse.POSITIVE Then...

    Rubén
     
  9. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola @Descartex , @Enrique Gonzalez R y @Rubsanpe ...

    Efectivamente, si coloco MsgBox() no se produce el error.

    Si coloco MsgBoxAsync() y agrego Wait for...también funciona correctamente!!!...

    Muchas gracias!!
    Saludos y buen fin de semana,
    Sergio
     
    Descartex and Enrique Gonzalez R like 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