Android map view widget has occasional runtime failure
- 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
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