Spanish Cancela el programa despues de aceptar un Dialog

Sergio Castellari

Active Member
Licensed User
Hola,

Tengo el siguiente codigo:
B4X:
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
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
Hola,

Tengo el siguiente codigo:
B4X:
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
No te aparece nignun log de error en el ide?
 

Descartex

Well-Known Member
Licensed User
Longtime 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:
B4X:
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

Active 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
 

Sergio Castellari

Active 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
 

Descartex

Well-Known Member
Licensed User
Longtime 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.
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
¿Por qué usar el MsgBoxAsync pudiendo utilizar el MsgBox normal?
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
 

Rubsanpe

Active 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
 
Top