I need the semaphore to hold there so that the return doesn't happen until the value is sent back from javascript. How do I get the web view to continue evaluating the javascript in the background?
On Jan 18, 10:05 am, Daniel Drozdzewski <daniel.drozdzew...@gmail.com> wrote: > Your semaphore allows ZERO passes through, in which case you have to > release first. > > Either change the parameter to Semaphore constructor or release before > calling Semaphore.acquire() > > Daniel > > On 18 January 2012 15:00, tatebn <brandonnt...@gmail.com> wrote: > > > > > > > > > > > By the way, this code is located in a subclassed WebView. > > > On Jan 18, 9:53 am, tatebn <brandonnt...@gmail.com> wrote: > >> 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 android-developers@googlegroups.com > > To unsubscribe from this group, send email to > > android-developers+unsubscr...@googlegroups.com > > For more options, visit this group at > >http://groups.google.com/group/android-developers?hl=en > > -- > Daniel Drozdzewski -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en