Android Question Sender does not seem to be loading values...?

DTsEMT

Member
Licensed User
Longtime User
So the following code runs through a database and builds buttons onto Panel1. The buttons are DIMmed in the loop and initialized to point to sub btnNearby when clicked - and they do so just fine.

However, in the btnNearby_Click, I dim a button "b" and set it to sender. The log explodes and tells me I need to initialize b.

B4X:
Sub Something
    Dim WildLat As String=TmpLat
    WildLat=WildLat.SubString2(0,WildLat.Length-2)
'
    Dim WildLong As String=TmpLong
    WildLong=WildLong.SubString2(0,WildLong.Length-2)
'
    Dim AllPlaces As List = Places.ListKeys
    Dim Halves(), MatchLat, MatchLong As String
    Dim ButtonTop As Int = btnadd.Top+btnadd.Height+3dip
    Dim ButtonHeight As Int=50dip
    For i = 0 To AllPlaces.Size-1
        Halves=Regex.Split(":",AllPlaces.Get(i))
        MatchLat=Halves(0).substring2(0,WildLat.Length)
        MatchLong=Halves(1).SubString2(0,WildLong.Length)
        If MatchLat=WildLat AND MatchLong=WildLong Then
            Dim newbtn As Button
            newbtn.Initialize("btnNearby")
            newbtn.Tag=AllPlaces.Get(i)
            HereIAm=Places.GetObject(newbtn.Tag)
            newbtn.Text=HereIAm.PlaceName
            Panel1.AddView(newbtn,5dip,ButtonTop,100%x-10dip,ButtonHeight)
            ButtonTop=ButtonTop+ButtonHeight+5dip
        End If
    Next
End Sub
'
Sub btnNearby_Click
    Dim b As Button
    b=Sender
    Dim KeyValue As String=b.Tag
    HereIAm=Places.GetObject(KeyValue)
    edtLocation.Text=HereIAm.PlaceName
    edtNote.Text=HereIAm.Notes
    Toggle(Panel2)
End Sub

The error text is:

** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
main_btnnearby_click (B4A line: 96)
Dim KeyValue As String=b.Tag
java.lang.RuntimeException: Object should first be initialized (Button).
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:46)
at anywheresoftware.b4a.objects.ViewWrapper.getTag(ViewWrapper.java:205)
at com.dtsemt_hereiam.main._btnnearby_click(main.java:449)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:63)
at android.view.View.performClick(View.java:4203)
at android.view.View$PerformClick.run(View.java:17189)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4950)


at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
at dalvik.system.NativeStart.main(Native Method)
java.lang.RuntimeException: Object should first be initialized (Button).

I've tried initializing, but it seems to be un-initialized after Sender is assigned.

So, what am I doing wrong here? I've looked so long my eyes are crossed... :-/
 

Peter Simpson

Expert
Licensed User
Longtime User
Dim b As Button
b=Sender

Try this

Dim b As Button
b.Initialize(Null) 'Null can be an Event name.
b=Sender
 
Upvote 0

DTsEMT

Member
Licensed User
Longtime User
Thanks, but that gave the same error:

B4X:
Sub btnNearby_Click
    Dim b As Button
    b.Initialize(Null)
    b=Sender
    Dim KeyValue As String=b.Tag
    HereIAm=Places.GetObject(KeyValue)

** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
main_btnnearby_click (B4A line: 97)
Dim KeyValue As String=b.Tag
java.lang.RuntimeException: Object should first be initialized (Button).
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:46)
at anywheresoftware.b4a.objects.ViewWrapper.getTag(ViewWrapper.java:205)
at com.dtsemt_hereiam.main._btnnearby_click(main.java:452)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:157)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:153)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:63)
at android.view.View.performClick(View.java:4203)
at android.view.View$PerformClick.run(View.java:17189)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4950)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
at dalvik.system.NativeStart.main(Native Method)
 
Upvote 0

DTsEMT

Member
Licensed User
Longtime User
I also note, adding the line
Log(Sender)

the log shows "null". Am I missing a library? But if so, then shouldn't the compiler complain that value Sender is undefined?

Arrrgh...
 
Upvote 0

DTsEMT

Member
Licensed User
Longtime User
Okay - getting ready to upload project, realized this is probably a false alarm. The project uses GPS. The GPS_GPSStatus and GPS_Locationchanged events were firing and disrupting the logic flow, and possibly consuming Sender as well.

My sincerest apologies (and thanks) to anyone who spent time on this.
 
Upvote 0
Top