I can explain why this error might be happening, suggest a few quick and dirty fixes, and then perhaps discuss some more long term fixes to this issue.
This issue appears to be related to SQLite transports.
This is the transport we use (by default) to cache objects on your local machine (Local Transport).
You can read more about what Transports are here, but in a nut shell, transport is an interface to a data store (of speckle objects). We have a few different transports for different needs (server ones for interfacing with a server, and local ones (memory, disk, SQLite).
Clearly, from your error, SQLite transports aren’t working nicely (maybe because they are looking for a database file in windows appdata directory.)
It’s not too surprising that this doesn’t work with Android, so I imagine this is what you are running into.
A quick and dirty fix, would be to specify your own localTransport when calling
Operations.Receive. That way, it won’t try and use the “default” SQLite one.
var transport = new ServerTransport(Client.Account, StreamId);
var localCache = new MemoryTransport();
var @base = await Operations.Receive(
Although, recreating a new memory transport for every receive operation is quite wasteful, and pointless as a cache. So you may want to consider making that
localCache a field so it gets reused.
However, this isn’t an ideal situation.
I can think of a few better options we could explore:
- Get SQlite transports working on android
- If SQLite transports flat-out don’t work on android, then they shouldn’t be the default local transport for android (duh!)
- Provide a way to explicitly specify “no cache”, e.g. implement a “null”/“non” transport.
Hopefully with my “quick and dirty” suggestion, you are able to get something working.
I will continue some tests my end.
Please do let me know if you have any difficulties, this exploratory feedback is super valuable to us, and hopefully will allow us to support non-desktop platforms going forward.