beeware / beeware/toga

Android map view widget has occasional runtime failure

Open
#2,495 1 comment 0 reactions 0 assignees View on GitHub
android bug
Dominant language
Python
Stars
5.4k
Forks
827
Avg merge
15h 39m
Merged PRs (30d)
40

Description

_Originally posted by @mhsmith in https://github.com/beeware/toga/issues/2462#issuecomment-2050658911_

I can't reproduce this now, but several times on the "Android 14.0 (Google APIs)" emulator I saw the map remain blank, and I could only fix it by restarting the process. In the logs it printed this message hundreds of times:
```
D/OsmDroid: TileLoader failed to load tile due to mWriter being null (map shutdown?)
```

Followed by this:
```
W/python.stderr: Error in handler: Attempt to invoke virtual method 'android.content.Context org.osmdroid.views.MapView.getContext()' on a null object reference
W/python.stderr: at org.osmdroid.views.MapViewRepository.getDefaultMarkerIcon(MapViewRepository.java:74)
W/python.stderr: at org.osmdroid.views.overlay.Marker.setDefaultIcon(Marker.java:139)
W/python.stderr: at org.osmdroid.views.overlay.Marker.(Marker.java:114)
W/python.stderr: at org.osmdroid.views.overlay.Marker.(Marker.java:92)
W/python.stderr: at com.chaquo.python.PyObject.callAttrThrowsNative(Native Method)
W/python.stderr: at com.chaquo.python.PyObject.callAttrThrows(PyObject.java:232)
W/python.stderr: at com.chaquo.python.PyInvocationHandler.invoke(PyInvocationHandler.java:31)
W/python.stderr: at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
W/python.stderr: at $Proxy8.onLocationChanged(Unknown Source)
W/python.stderr: at android.location.LocationManager$LocationListenerTransport$1.operate(LocationManager.java:3277)
W/python.stderr: at android.location.LocationManager$LocationListenerTransport$1.operate(LocationManager.java:3274)
W/python.stderr: at com.android.internal.listeners.ListenerExecutor.lambda$executeSafely$0(ListenerExecutor.java:127)
W/python.stderr: at com.android.internal.listeners.ListenerExecutor$$ExternalSyntheticLambda0.run(Unknown Source:8)
W/python.stderr: at android.os.Handler.handleCallback(Handler.java:958)
W/python.stderr: at android.os.Handler.dispatchMessage(Handler.java:99)
W/python.stderr: at android.os.Looper.loopOnce(Looper.java:205)
W/python.stderr: at android.os.Looper.loop(Looper.java:294)
W/python.stderr: at android.app.ActivityThread.main(ActivityThread.java:8177)
W/python.stderr: at java.lang.reflect.Method.invoke(Native Method)
W/python.stderr: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
W/python.stderr: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
W/python.stderr: Traceback (most recent call last):
W/python.stderr: File "/data/data/org.beeware.examples.hardware/files/chaquopy/AssetFinder/requirements/toga/handlers.py", line 80, in _handler
W/python.stderr: File "/data/data/org.beeware.examples.hardware/files/chaquopy/AssetFinder/app/hardware/app.py", line 121, in location_changed
W/python.stderr: File "/data/data/org.beeware.examples.hardware/files/chaquopy/AssetFinder/requirements/toga/widgets/mapview.py", line 104, in add
W/python.stderr: File "/data/data/org.beeware.examples.hardware/files/chaquopy/AssetFinder/requirements/toga_android/widgets/mapview.py", line 97, in add_pin
W/python.stderr: File "class.pxi", line 135, in java.chaquopy.JavaClass.__call__
W/python.stderr: File "class.pxi", line 209, in java.chaquopy.setup_object_class.JavaObject.__init__
W/python.stderr: File "class.pxi", line 972, in java.chaquopy.JavaMultipleMethod.__get__.lambda3
W/python.stderr: File "class.pxi", line 1010, in java.chaquopy.JavaMultipleMethod.__call__
W/python.stderr: File "class.pxi", line 789, in java.chaquopy.JavaMethod.__call__
W/python.stderr: File "class.pxi", line 837, in java.chaquopy.JavaMethod.call_constructor
W/python.stderr: File "env.pxi", line 110, in java.chaquopy.CQPEnv.NewObjectA
W/python.stderr: File "env.pxi", line 546, in java.chaquopy.CQPEnv.check_exception
```

This looks like it might be an issue with OSMDroid. The error was generated by the Toga Hardware demo app.

Contributor guide

Open the contributing guide

Research direction

Start with toga/widgets/mapview.py and toga_android/widgets/mapview.py, especially the add and add_pin paths shown in the traceback, then inspect the Hardware demo's location_changed handler in app.py. Reproduce the failure on the Android 14 emulator if possible and trace the map shutdown and marker-creation lifecycle; done means the map no longer remains blank or raises the reported runtime error.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, python
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.