Spanish [SOLUCIONADO]controlar Error Jobdone al fallar Query.php

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, Pues lo del titulo, en mi aplicación conecto a una MYSQL para verificar datos (NO Esenciales para su uso) pero si para estadísticas mías.
Para probar todos los posibles fallos, hice mi técnica de ensayo, destrucción y error :p.

El error de no encontrar la ruta www.MIHOSTING.com/query.php lo solvento sin problemas, pero al cambiarle los datos de conexión al QUERY (por si el hosting cambiara o algo)

si me da un error que no se ubicar para controlar., a ver si alguien sabría decirme donde es.

uso Okhttputis y Jobdone

B4X:
*** Service (httputils2service) Create ***
** Service (httputils2service) Start **
Response from server:
main$ResumableSub_JobDoneresume (java line: 2809)
org.json.JSONException: End of input at character 0 of
    at org.json.JSONTokener.syntaxError(JSONTokener.java:449)
    at org.json.JSONTokener.nextValue(JSONTokener.java:97)
    at anywheresoftware.b4a.objects.collections.JSONParser.NextArray(JSONParser.java:60)
    at com.fjo.CDG_Inventario_mysql.main$ResumableSub_JobDone.resume(main.java:2809)
    at com.fjo.CDG_Inventario_mysql.main._jobdone(main.java:2717)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
    at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1178)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 

josejad

Expert
Licensed User
Longtime User
Hola TheFalcon:

No sé mucho de este tema, y sin ver el código (tanto el del okhttputils como el de php) es difícil de decir.
Qué se me ocurre, pues que parece que estás intentando leer un json, por tanto, tu query debe devolver siempre un json, haya el fallo que haya.
Lo que se me pasa por la cabeza es que accedas a tu página desde un navegador, ¿qué salida te da cuando funciona bien? y ¿qué salida te da cuando cambias la query y falla?

Por cierto, supongo que con Okhttputils te refieres a OKhttputils2, ya que la anterior está obsoleta. Y que con Jobdone, te refieres a que está en un wait for.
 

TheFalcon

Active Member
Licensed User
Longtime User
si uso las versiones nuevas, de okhttp, de jobdone ya me dejas en duda, es la que uso siempre.
si pongo el query bueno en la web me devuelve [ ] que es el RES de jobdone, si pongo el malo, no me devuelve nada.

El caso es que no es una cosa de vida o muerte para que la aplicación funcione, es mas para prevenir, por que si el Hosting se cayera, o el MYSQL cambiara, me daría ese error cada vez que abriera la aplicación, y la aplicación para funcionar no requiere internet, es solo pro actualizar usos etc etc


este seria el jobdone que uso
B4X:
Sub ExecuteRemoteQuery(Query As String, JobName As String)
    
    Dim job As HttpJob
    job.Initialize(JobName, Me)
        job.PostString("https://MIWE/query.php", Query)

    'job.PostString(queryphp, Query)
End Sub

Sub JobDone(Job As HttpJob)

        
    ProgressDialogHide
    If Job.Success Then
    
        Dim res As String
        res = Job.GetString
        Log("Response from server: " & res)
 

josejad

Expert
Licensed User
Longtime User
Hola:

Me refiero a que deberías usar el jobdone con Wait for
B4X:
Dim j As HttpJob
j.Initialize("", Me)
j.Download("https://www.google.com")
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
   Log(j.GetString)
End If
j.Release
Ahí ves que si j.Success es falso, ya sabes que ha fallado.
 

TheFalcon

Active Member
Licensed User
Longtime User
Lo acabo de arreglar, si antes molesto antes lo arreglo(llevaba 1 hora con eso). lo arregle con un try catch. el Try al principio del Jobdone. el cath antes del job.release

Pero voy a probar ahora mismo como me lo comentas. thx

-PROBADO: Me devuelve el mismo error que como yo lo hacia, Gracias Igualmente, al menos ya se soluciono, que no creo que ocurra nunca o es muy poco probable que se de el caso del query mal, pero me gusta atarlo todo
 

TILogistic

Expert
Licensed User
Longtime User
Controlar los errores y tiempos de ejecución:

B4X:
Public Sub DownloadDataURL(LinkURL As String, TimeOut As Int) As ResumableSub
    Dim ResultURL As String
    Dim j As HttpJob
    Try
        j.Initialize("", Me)
        j.GetRequest.Timeout = TimeOut
        j.Download(LinkURL)
        Wait For (j) JobDone(j As HttpJob)
        If j.Success Then
            ResultURL = j.GetString
        Else
            ResultURL = j.ErrorMessage
        End If
        j.Release
    Catch
        ResultURL = LastException.Message
    End Try
    Return ResultURL
End Sub
 
Top