Italian App Crash

Sberla

Active Member
Licensed User
Longtime User
Salve ragazzi ho pubblicato un app sul playstore, ma ho notato che su alcuni dispositivi funziona su altri fa crash. Da quanto ho capito dipende dalla versione di android.

Ho fatto un test con il mio tablet avendo android 7.0 e mi da questo errore:

B4X:
java.lang.RuntimeException: android.os.NetworkOnMainThreadException
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:206)
    at anywheresoftware.b4a.BA$2.run(BA.java:328)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6688)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:157)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
    at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
    at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
    at java.io.BufferedWriter.flush(BufferedWriter.java:254)
 

MarcoRome

Expert
Licensed User
Longtime User
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)

Molto probabilmente non hai applicato le AddPermission corrette.
 

MarcoRome

Expert
Licensed User
Longtime User
O forse è douvto ad un blocco temporaneo dell'applicazione che non risponde. ( Cosa hai notato sul tablet ? )
Utilizzi hc o okHttpUtil ?
 

Sberla

Active Member
Licensed User
Longtime User
Adesso ho provato a creare un'app soltanto con la connessione al socket:

B4X:
#Region  Project Attributes
    #ApplicationLabel: B4A Example
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: unspecified
    #CanInstallToExternalStorage: False
#End Region

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

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

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private Button1 As Button
   
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("index")

End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button1_Click
   
    'Connessione al server
    Socket1.Initialize("socket1")
    Socket1.Connect("192.168.1.1","1","1000")

End Sub

compilata come release si blocca e dice: Il programma B4A Example è stato arrestato.

Come faccio ad abilitare le AddPermission?
 

MarcoRome

Expert
Licensed User
Longtime User
Come suggerito da @Erel ( QUI )

Aggiungi questo Sub
B4X:
Sub DisableStrictMode
   Dim jo As JavaObject
   jo.InitializeStatic("android.os.Build.VERSION")
   If jo.GetField("SDK_INT") > 9 Then
     Dim policy As JavaObject
     policy = policy.InitializeNewInstance("android.os.StrictMode.ThreadPolicy.Builder", Null)
     policy = policy.RunMethodJO("permitAll", Null).RunMethodJO("build", Null)
     Dim sm As JavaObject
     sm.InitializeStatic("android.os.StrictMode").RunMethod("setThreadPolicy", Array(policy))
   End If
End Sub

e richiama la stessa in Activity_create
B4X:
Sub Activity_Create....

....
DisableStrictMode
....
 

Sberla

Active Member
Licensed User
Longtime User
Ho provato ma mi da lo stesso errore. Devo inserire qualcosa nel Manifest?
 

Star-Dust

Expert
Licensed User
Longtime User
Marco che permessi richiedono il codice che hai postato?
 
Last edited:

MarcoRome

Expert
Licensed User
Longtime User
Ora hai direttamente @Erel che ti risponde, vedrai che risolverai il problema.
---------------------------------------------------------------------------------------
Now you have @Erel that response you answers, so, you will see that will solve the problem
 

Sberla

Active Member
Licensed User
Longtime User
Ho risolto. Il metodo che mi hai dato funziona bene, è solo che compilandolo come release mi da errore, pubblicandolo sul playstore e scaricando l'app da li funziona perfettamente. Grazieeee
 

Star-Dust

Expert
Licensed User
Longtime User
Adesso sono curioso, cos'era il problema?
 
Top