Spanish Ayuda con iniciar servicios con json [Solucionado]

ebqlabs

Active Member
Licensed User
Hola, saludos.

Me pregunto como realizo las notificaciones. Por ejemplo mi aplicación la tengo conectadas a BD con json (webservice).

1) En una pantalla, muestro una lista de una consulta. pero como realizo para mostrar cuando hay un nuevo registro en la lista ? por que mientras no cargue de nuevo esa pantalla no me mostrar los nuevos registros.

EJEMPLO: como en el chat de whatsapp, cuando llega un mensaje la lista se actualiza solo.

2) Cuando estoy afuera de la aplicación , como puedo realizar para que notifique que tengo un nuevo registro ?

Saludos, algunos consejos para la implementación ? Gracias
 

ebqlabs

Active Member
Licensed User
Me podrian sacar de una duda
si este es mi Main

B4X:
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: false
#End Region

Sub Process_Globals
 
End Sub

Sub Globals
    Dim h As HttpJob
    Dim json As JSONParser
    Private ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ListView1.Initialize("ListView1")
    Activity.AddView(ListView1,0,10%y,100%x,90%y)
 
    h.initialize("json", Me)
    h.Download2("DIRECCION WEB SERVICE"))
End Sub

Sub Activity_Resume

End Sub

Sub JobDone(job As HttpJob)
    If job.Success Then
        json.Initialize(job.GetString)
        CargarDatos
    Else
        Msgbox(job.ErrorMessage, "Error")
    End If
End Sub

Sub CargarDatos
    Dim m As Map
    m=json.NextObject 
    Dim data As List

    data=m.Get("data")
        ListView1.Clear
        For i=0 To data.Size-1
            m=data.Get(i)
            ListView1.AddTwoLines(m.Get("tmp_rut_pac"), m.Get("tmp_nom_pac"))
        Next
End Sub

tengo que crear un servicio por lo leído

Project/ Add New Module / Service Module

en donde tengo que poner la consulta json para que corra ? saludos gracias


B4X:
#Region  Service Attributes
    #StartAtBoot: False
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub
Sub Service_Create

End Sub

Sub Service_Start (StartingIntent As Intent)

End Sub

Sub Service_Destroy

End Sub
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Deberías de "ponerte" al día con los servicios.:)
Pégale un vistazo al siguietne hilo: https://www.b4x.com/android/forum/threads/38960
Gabino, deberias barrer para casa, para eso hice un tutorial? :D
https://www.b4x.com/android/forum/threads/b4a-tutorial-módulos-de-servicio.42689/

en donde tengo que poner la consulta json para que corra ? saludos gracias

Ebqlabs, si lees mi tutorial sabras donde te irá mejor ponerlo :D, pero el sitio que va a entrar siempre es en Sub Service_Start (StartingIntent AsIntent) , esto es similar al Sub Activity_Create(FirstTime As Boolean) de los formularios

Tambien entrará en Sub Service_Create, pero solo cuando lo llames la primera vez y si no matas el servicio.

Saludos
 

ebqlabs

Active Member
Licensed User
Hola


Gabino, deberias barrer para casa, para eso hice un tutorial? :D
https://www.b4x.com/android/forum/threads/b4a-tutorial-módulos-de-servicio.42689/



Ebqlabs, si lees mi tutorial sabras donde te irá mejor ponerlo :D, pero el sitio que va a entrar siempre es en Sub Service_Start (StartingIntent AsIntent) , esto es similar al Sub Activity_Create(FirstTime As Boolean) de los formularios

Tambien entrará en Sub Service_Create, pero solo cuando lo llames la primera vez y si no matas el servicio.

Saludos


Me ha servido por orientación, creo que voy por 50 % creado. Me refresca todo bien al momento de insertar un nuevo registro

este vendria siendo mi formulario donde muestro:

B4X:
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: False
#End Region

Sub Process_Globals

End Sub

Sub Globals
    Dim container As Panel



    Dim servicios As Button

    Dim Scroll As ScrollView
    Dim ServicioPanel As Panel

    Dim txtpedido As Label
    Dim txtcliente As Label
    Dim txtinicio As Label
    Dim txtdestino As Label
    Dim txthoracto As Label


End Sub

Sub Activity_Create(FirstTime As Boolean)
    container.Initialize("container")
    Activity.AddView(container,0,0,100%x,100%y)   
    container.Color = Colors.RGB(0,0,0)

End Sub

Sub Activity_Resume
    StartService("cargarservicios")
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    CancelScheduledService(cargarservicios)
End Sub



Sub CargarDatos
    Dim m As Map
    m=cargarservicios.json.NextObject
    Dim data As List
    data=m.Get("data")


    For z=0 To data.Size-1
    Next
    Dim height As Int
    height = z * 12.2%y

    Scroll.Initialize(height)
    Activity.AddView(Scroll,0,20%y,100%x,70%y)

    Dim lblAngle As Int = 0
    Dim border As ColorDrawable

        For i=0 To data.Size-1
            m=data.Get(i)
       
            Dim row As Int
            row = i * 92
            Dim pedido As Label   
            Dim cliente As Label
            Dim inicio As Label
            Dim estado As Label
       
            ServicioPanel.Initialize("ServicioPanel")
            pedido.Initialize("pedido")
            cliente.Initialize("cliente")
            inicio.Initialize("inicio")
            estado.Initialize("estado")
   
            txtpedido.Initialize("txtpedido")
            txtcliente.Initialize("txtcliente")
            txtinicio.Initialize("txtinicio")
            txtdestino.Initialize("txtdestino")
            txthoracto.Initialize("txthoracto")
       
       
            Scroll.Panel.AddView(ServicioPanel, 0, 0 + row, 100%x, 12%y)
       
       
            If i Mod 2 = 0 Then
                Dim col2 As Int = Colors.RGB(227,254,255)
            Else
                Dim col2 As Int = Colors.RGB(255,255,255)
            End If

            border.Initialize(col2, lblAngle)
            ServicioPanel.Background = border
            ServicioPanel.Tag = (m.Get("tsp_num_ser"))
       
            ServicioPanel.AddView(pedido, 0, 1%y, 20%x, 4%y)
            pedido.Text = "Pedido"
            pedido.TextSize = 14
            pedido.TextColor = Colors.RGB (0,0,0)
       
            ServicioPanel.AddView(estado, 80%x, 1%y, 20%x, 4%y)
            estado.Text = ""
            estado.TextSize = 14
            estado.TextColor = Colors.RGB (0,0,0)
       
            ServicioPanel.AddView(cliente, 0, 4%y, 20%x, 4%y)
            cliente.Text = "Cliente"
            cliente.TextSize = 14
            cliente.TextColor = Colors.RGB (0,0,0)
       
            ServicioPanel.AddView(inicio, 0, 7%y, 20%x, 11%y)
            inicio.Text = "Inicio"
            inicio.TextSize = 14
            inicio.TextColor = Colors.RGB (0,0,0)
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
       
            ServicioPanel.AddView(txtpedido, 20%x, 1%y, 40%x, 4%y)
            txtpedido.Text = (m.Get("tsp_num_ser"))
            txtpedido.TextColor = Colors.RGB (0,48,107)
                   
            ServicioPanel.AddView(txtcliente, 20%x, 4%y, 80%x, 4%y)
            txtcliente.Text = (m.Get("tsp_nom_emp"))
            txtcliente.TextColor = Colors.RGB (0,0,0)

            ServicioPanel.AddView(txtinicio, 20%x, 7%y, 80%x, 11%y)
            txtinicio.Text = ""
            txtinicio.TextColor = Colors.RGB (0,0,0)
   
        Next
   
End Sub



End Sub

este el servicio [cargar servicio]

B4X:
#Region  Service Attributes
    #StartAtBoot: False
#End Region

Sub Process_Globals
    Dim json As JSONParser
End Sub
Sub Service_Create

End Sub

Sub Service_Start (StartingIntent As Intent)

    Dim h As HttpJob


    h.initialize("json1", Me)
    h.Download2("http://www.pagina", Array As String("iNumSer", "0", "iMovDes", "0"))
    StartServiceAt("", DateTime.Now + 1 * DateTime. TicksPerSecond, True)
End Sub

Sub Service_Destroy

End Sub


Sub JobDone(job As HttpJob)
    If job.Success Then
        json.Initialize(job.GetString)
        CallSubDelayed(frm_srv_cli,"CargarDatos")
    Else
        Msgbox(job.ErrorMessage, "Error")
    End If
End Sub


Cada un segundo voy refrescando el json. pregunta:

1) por cada consulta no me gastara mucho el dinero de mi saldo ?

2) la mas importante, como puedo realizar que si existe un nuevo registro hay que gatille el servicio.


saludos, gracias. Soy nuevo en esto
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Como decia Jack el destripador "vayamos por partes" :D

Si tu dices:
2) Cuando estoy afuera de la aplicación , como puedo realizar para que notifique que tengo un nuevo registro ?

Y pones esto:
B4X:
Sub Activity_Pause (UserClosed As Boolean)
  CancelScheduledService(cargarservicios)
End Sub
Cuando salgas de la aplicación, llames a otro formulario o simplemente gires el dispositivo se parará el servicio. Creo que te vendria bien que miraras un minitutorial que hice sobre [B4A] [Tutorial] Guia rápida del Ciclo de Vida de Android, incluso hice una chuleta para que la tengas a mano y que veas que pasa en cada caso:
https://www.b4x.com/android/forum/t...ia-rápida-del-ciclo-de-vida-de-android.38760/
Por otro lado con eso lo que haces es cancelar las llamadas de StartServiceAt( , para parar el servicio tendrias ademas de emplear ese, emplear este:
B4X:
StopService(NombreDelServicio) ‘ matar el Servicio
Esto se explica tambien en mi tutorial.

por cada consulta no me gastara mucho el dinero de mi saldo ?
Si, esta claro que si, ademas no es bueno que un servicio lo hagas tan frecuente, por que te va a consumir mucho recurso y eso tambien hará que la bateria del dispositivo se gaste antes. Creo que con esto tu segunda pregunta estará mas clara para saber que puedes hacer.

Saludos
 

ebqlabs

Active Member
Licensed User
Hola

Como decia Jack el destripador "vayamos por partes" :D

Si tu dices:


Y pones esto:
B4X:
Sub Activity_Pause (UserClosed As Boolean)
  CancelScheduledService(cargarservicios)
End Sub
Cuando salgas de la aplicación, llames a otro formulario o simplemente gires el dispositivo se parará el servicio. Creo que te vendria bien que miraras un minitutorial que hice sobre [B4A] [Tutorial] Guia rápida del Ciclo de Vida de Android, incluso hice una chuleta para que la tengas a mano y que veas que pasa en cada caso:
https://www.b4x.com/android/forum/threads/b4a-tutorial-guia-rápida-del-ciclo-de-vida-de-android.38760/
Por otro lado con eso lo que haces es cancelar las llamadas de StartServiceAt( , para parar el servicio tendrias ademas de emplear ese, emplear este:
B4X:
StopService(NombreDelServicio) ‘ matar el Servicio
Esto se explica tambien en mi tutorial.


Si, esta claro que si, ademas no es bueno que un servicio lo hagas tan frecuente, por que te va a consumir mucho recurso y eso tambien hará que la bateria del dispositivo se gaste antes. Creo que con esto tu segunda pregunta estará mas clara para saber que puedes hacer.

Saludos

Ok, seguire batallando con esto.

Pregunto
No abra un tutorial de servicios con json? porque en caso de que cada segundo me traiga la consulta empleada, pero si se repiten los mismo registro sera innecesario realizar la notificación, pero si encuentra un nuevo registro hay si que me avise.

Tipo como cuando te llega un nuevo mensaje, por ejemplo en washapp.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Pregunto
No abra un tutorial de servicios con json? porque en caso de que cada segundo me traiga la consulta empleada, pero si se repiten los mismo registro sera innecesario realizar la notificación, pero si encuentra un nuevo registro hay si que me avise.

Un servicio es un servicio pongas el código que pongas, su funcionamiento siempre es el mismo como explico en mi tutorial u otros foreros en diferentes tutoriales.

Por otro lado no entiendo lo de la notificación, si los datos se repiten, pues no das la notificación, y si son diferentes si, a menos que tu pregunta sea, como realizar una notificación, si es esto, busca en este foro que hay varios ejemplos, y si no crea un nuevo post y habrá bastante gente que te responda.

Tipo como cuando te llega un nuevo mensaje, por ejemplo en washapp.
En parte queda un poco contestado arriba, si lo que pretendes es que te salga una notificación y no sabes como hacerla, ya te comenté arriba que puedes hacer.


Saludos
 

ebqlabs

Active Member
Licensed User
Hola



Un servicio es un servicio pongas el código que pongas, su funcionamiento siempre es el mismo como explico en mi tutorial u otros foreros en diferentes tutoriales.

Por otro lado no entiendo lo de la notificación, si los datos se repiten, pues no das la notificación, y si son diferentes si, a menos que tu pregunta sea, como realizar una notificación, si es esto, busca en este foro que hay varios ejemplos, y si no crea un nuevo post y habrá bastante gente que te responda.


En parte queda un poco contestado arriba, si lo que pretendes es que te salga una notificación y no sabes como hacerla, ya te comenté arriba que puedes hacer.


Saludos


Ok, gracias tras días de lucha lo he logrado ( gracias por los tutoriales).

Una ultima pregunta para poder dar por solucionado el tema.

Como realizo al hacer click en la notificación, la notificación desaparezca ?

saludos

B4X:
For i = 1 To 1
                Dim n As Notification
                n.Initialize
                n.SetInfo("Servicio", mapaNotificacion.Get("tsp_num_ser"), frm_srv_his)
                n.Icon = "icon"
                n.Notify(i)
               
               
            Next

se que el n.Cancel(i) cancela. pero donde lo coloco ?
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Ponlo en el main, en el Sub Activity_Resume, y asi cuando le des a la notificación y entre en main la cancelarás

Saludos
 
Top