I'm trying to evaluate javascript with a semaphore lock.  I need to
query some web content about which context menus to show and need it
to be synchronous.  When I try to acquire the semaphore the thread
locks without the javascript being evaluated and my javascript
interface method being called.

Here's my code.

private Semaphore returnSemaphore = new Semaphore(0);
        private String returnValue;

        public String getJSValue(String expression)
        {
                String code = 
"javascript:_JSEval.setValue((function(){try{return "
+ expression
                        + "+\"\";}catch(js_eval_err){return '';}})());";
                //String code = "javascript: alert('here');";
                Log.d(TAG, "eval: " + code);

                this.loadUrl(code);


                try {
                        Log.d(TAG, "eval: about to acquire semaphore, " +
returnSemaphore.availablePermits());

                        returnSemaphore.acquire();

                        Log.d(TAG, "past semaphore acquire");

                        return returnValue;
                } catch (InterruptedException e) {
                        Log.e(TAG, "eval: Interrupted", e);
                }
                return null;

        }

        @SuppressWarnings("unused")
        private class JSEval
        {
                public void setValue(String value)
                {
                        Log.i(TAG, "eval: in set value");
                        //if (value != null) {
                                returnValue = value;
                        //}
                        returnSemaphore.release();
                }
        }


If I remove the semaphore acquire call, I get a result in setValue, so
I know the interface is working.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to