Saturday, October 5, 2019

Re: ClassCastException in some browser, but not others (

Probably

--> IDBDatabase idb = Js.uncheckedCast(idbr.result);

would work too.

The point is is uncheckedCast is (AFAIU) considered dangerous.

There are two other casts that perform run-time checks but they have a 1) performance penalty and 2) some times throw exceptions not due to a bug but because the casting is invalid based on the type definitions GWT compiler knows about.

Here is the first type:
a) Java cast --> MyObject x = (MyObject) yourObject;
b) Js checked cast --> MyObject x = Js.cast(yourObject);
and of course
c) Js unchecked cast --> MyObject x = Js.uncheckedCast(yourObject);

I think (not sure) that a) and b) are the same at least on development mode. Not so sure what they are doing in production mode.

My 2 cents of limited understanding...

Vassilis



On 10/6/19 7:00 AM, Shawn Asamoto-Brown wrote:
> OK, this works --> IDBDatabase idb = Js.<IDBDatabase> uncheckedCast(idbr.result);
>
> @SuppressWarnings({ "unchecked" })
> public static void initIndexedDb(){
>
> IDBFactory idbf= IndexedDbGlobal.indexedDB;
> IDBOpenDBRequest idbr= idbf.open(INDEXEDDB_NAME);
>
> idbr.onsuccess= new OnsuccessFn() {
>
> @Override
> public Object onInvoke(elemental2.dom.Event p0) {
>
> // fails w java.lang.ClassCastException
> // IDBDatabase idb = (IDBDatabase) idbr.result;
> // IDBDatabase idb = Js.<IDBDatabase> cast(db);
>
> //this works
> IDBDatabase idb= Js.<IDBDatabase > uncheckedCast(idbr.result);
>
> DOMStringList dsl= idb.objectStoreNames;
>
> dsl.asList().forEach(s-> {
> Log.info("FOUND DB " + s);
> });
>
> return idbr.result;
> }
> };
>
> idbr.onerror= new OnerrorFn() {
>
> @Override
> public Object onInvoke(elemental2.dom.Event p0) {
> Log.error("OnerrorFn " + p0.type);
> return null;
> }
> };
> }
>
>
> On Sat, Oct 5, 2019 at 10:47 PM Shawn <shawn@koyuru.com <mailto:shawn@koyuru.com>> wrote:
>
> Meant to add that I am sure indexeddb is supported in all the browsers I am using.
>
> Here is the code again ... sorry about the previous formatting.
>
> IDBFactory idbf = IndexedDbGlobal./indexedDB/;
>
> IDBOpenDBRequest idbr = idbf.open(*/INDEXEDDB_NAME/*);
>
> idbr*.*onsuccess = new OnsuccessFn() {
>
>
> /@Override/
>
> public Object onInvoke(elemental2.dom.Event p0) {
>
>                                         //error is next
>
> idb = (IDBDatabase)idbr.result;
>
>
> DOMStringList dsl = idb.objectStoreNames;
>
>
> dsl.asList().forEach(s -> {
>
> Log./error/("FOUND DB " + s);
>
> });
>
> return idbr.result;
>
> }
>
> };
>
>
> On Chrome desktop, I find the indexeddb I created in handwritten js code.  I don't get why there is a ClassCastException in some browsers.  Is elemental2-indexeddb or gxt 2.9 (HEAD) not supported everywhere?
>
> --
> You received this message because you are subscribed to the Google Groups "GWT Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com <mailto:google-web-toolkit+unsubscribe@googlegroups.com>.
> To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/cbc724a1-5b8b-4478-8119-02af3d279c2b%40googlegroups.com <https://groups.google.com/d/msgid/google-web-toolkit/cbc724a1-5b8b-4478-8119-02af3d279c2b%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
> --
> You received this message because you are subscribed to the Google Groups "GWT Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com <mailto:google-web-toolkit+unsubscribe@googlegroups.com>.
> To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/CAEQ-_W11k9ze2bQnnB9K_fiGhna1f8AkmO25pLKYqmbA9vy1OQ%40mail.gmail.com <https://groups.google.com/d/msgid/google-web-toolkit/CAEQ-_W11k9ze2bQnnB9K_fiGhna1f8AkmO25pLKYqmbA9vy1OQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/f9e0cdc4-c280-5443-747b-2353363d4663%40gmail.com.

No comments:

Post a Comment