Office Hours Transcript: 2021-08-14
how can I help you today?
Hello. Sorry, I accidentally accessed the chat by browsing the commonsware.com site. Thanks anyway ! :)
how can I help you today?
In https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader.Builder addPathHandler what is argument "path" relative to?
I believe that refers to the path portion of a URL
so AFAIK it is not relative to anything, other than
(er, ignore that "other than" part)
Can you give an example? For example on https://stackoverflow.com/questions/40069737/how-to-use-android-internal-storage it shows "/data/user/0/com.ed.ilan.ioioterbium/files/documents/2016_9_16_10_28_12.csv", so what would be the value of path? The documentation is not clear
the value of
path is whatever you want it to be – I suppose you could define it as being relative to https://appassets.androidplatform.net
see the example in https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader
and that Stack Overflow question does not seem to be related to
WebViewAssetLoader, though perhaps I am misunderstanding your situation
final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder() .addPathHandler("/assets/", new AssetsPathHandler(this)) .build();
/assets/ is referring to the path segment in:
in that example it is actually relative to main, so path is "assets". It wouldn’t work if asssets did not reside in main
well, all assets get merged together from the relevant build variants when the app is compiled
debug build would merge
debug/assets/ into the assets packaged in the app
the comment above the
loadUrl() line in that sample is using
main/assets as a candidate place for assets to load from
but that example certainly could be made clearer
is the loadUrl line necessary?
you are going to need to get content into the
WebView somehow – whether that is via
loadDataWithBaseURL() is up to you
loadUrl() call is trying to illustrate directly the type of URL that inside some Web page would point to an asset, instead of to actual Web content loaded from the Internet
and, if your actual HTML were to be loaded from assets, that is the sort of
loadUrl() call you would make to load that asset into the
From the docs it seems the purpose is to link to an asset stored locally using https://appassets.androidplatform.net instead of file://, isn’t loadUrl loading a webpage? If I just want to upload to appassets I dont see a reason to call loadUrl in addition to intercepting a request
isn’t loadUrl loading a webpage?
yes – in this case, the Web page itself is an asset
going back to your original question, if the opening Java were:
final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder() .addPathHandler("/something-else/", new AssetsPathHandler(this)) .build();
then the URL syntax you would use is:
is it assuming "something-else" is relative to a local directory? In ""/data/user/0/com.ed.ilan.ioioterbium/files/documents/2016_9_16_10_28_12.csv" can I use "/user" or "files". Do you see my point?
WebViewAssetLoader does not load from the filesystem
at least, AFAIK
if it does, I do not know how to set that up
so the sample there is:
File publicDir = new File(context.getFilesDir(), "public"); // Host "files/public/" in app's data directory under: // http://appassets.androidplatform.net/public/... WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder() .addPathHandler("/public/", new InternalStoragePathHandler(context, publicDir)) .build();
in this case,
/public/ is still part of the URL, and you control where that maps to on the filesystem via the
File that you pass to the
you can have several handlers for a given
WebViewAssetLoader, with different URL prefixes mapping to different things (e.g., one mapping to assets, one mapping to some filesystem directory)
it’s been several months since I played with
WebViewAssetLoader, and there I only used it literally for assets – sorry that I am rusty on this
np I appreciate it
we’re about 10 minutes over the chat window, and I need to run an errand, so… that’s a wrap for today’s chat
the next one is Tuesday in the 7:30pm US Eastern time slot
have a pleasant day!