B4J Question webview - return if host reachable?

bogdanc

Active Member
Licensed User
Longtime User
Hi All!

How to return that host is reachable.
I'm loading a web page by webview.
How to return info that page is reachable or not.
Same as You have functionality in any web browser.

Thank You!
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
Add a state listener:
B4X:
Private Sub AddStateListener(wv As WebView)
   Dim jo As JavaObject = wv
   Dim event As Object = jo.CreateEventFromUI("javafx.beans.value.ChangeListener", "statechanged", Null)
   jo.RunMethodJO("getEngine", Null).RunMethodJO("getLoadWorker", Null).RunMethodJO("stateProperty", Null) _
     .RunMethod("addListener", Array(event))
End Sub

Private Sub statechanged_Event (MethodName As String, Args() As Object) As Object
   Dim newState As String = Args(2)
   Log($"New state: ${newState}"$)
   If newState = "FAILED" Then
     fx.Msgbox(MainForm, "Error loading page", "")   
   End If
   Return Null
End Sub
 
Upvote 0

bogdanc

Active Member
Licensed User
Longtime User
Add a state listener:
B4X:
Private Sub AddStateListener(wv As WebView)
   Dim jo As JavaObject = wv
   Dim event As Object = jo.CreateEventFromUI("javafx.beans.value.ChangeListener", "statechanged", Null)
   jo.RunMethodJO("getEngine", Null).RunMethodJO("getLoadWorker", Null).RunMethodJO("stateProperty", Null) _
     .RunMethod("addListener", Array(event))
End Sub

Private Sub statechanged_Event (MethodName As String, Args() As Object) As Object
   Dim newState As String = Args(2)
   Log($"New state: ${newState}"$)
   If newState = "FAILED" Then
     fx.Msgbox(MainForm, "Error loading page", "")  
   End If
   Return Null
End Sub


Hi Erel!

Thank You for replay!!!


This working perfect.

I observed something. When I use some random domain name it's responding very quick but when I use an IP like: 192.168.1.5 it;s takes around minute to get response.


Below my sample code with Yours listener.

B4X:
Sub Process_Globals
    Private fx As JFX
    Private MainForm As Form
    Private WebView1 As WebView
       
    Dim joWV As JavaObject
   
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.SetFormStyle("UNIFIED")
    MainForm.RootPane.LoadLayout("webview_test") 'Load the layout file.
   
        WebView1.Enabled=True
        Dim url As String
        url="http://192.168.1.5"
        WebView1.LoadUrl(url)
        AddStateListener(WebView1)
    MainForm.Show
End Sub

Private Sub AddStateListener(wv As WebView)
   Dim jo As JavaObject = wv
   Dim event As Object = jo.CreateEventFromUI("javafx.beans.value.ChangeListener", "statechanged", Null)
   jo.RunMethodJO("getEngine", Null).RunMethodJO("getLoadWorker", Null).RunMethodJO("stateProperty", Null) _
     .RunMethod("addListener", Array(event))
End Sub

Private Sub statechanged_Event (MethodName As String, Args() As Object) As Object
   Dim newState As String = Args(2)
   Log($"New state: ${newState}"$)
   If newState = "FAILED" Then
'     fx.Msgbox(MainForm, "Error loading page", "")  
    Log( "Error loading page")  
   End If
   Return Null
End Sub
 
Upvote 0

bogdanc

Active Member
Licensed User
Longtime User
  • I'm loading some web page to webview
  • on that page i have some data (I refreshing webview every 1s to refresh the data, I used a timer for that)
  • when I finish my readings I need to disconnect.
  • I enabling timer in the listener and I cannot disconnect because listener keep the timer on
 
Upvote 0
Top