Webview question: Is it possible to execute Javascript from Java synchronously?

by j » Tue, 07 Apr 2009 02:35:13 GMT


Sponsored Links
 I am writing a hybrid web/native app and ran into issue.  My app
downloads a music file via Java code, and needs to update a Javascript
download progress bar in the WebView in real time.

My understanding is the only way to call Javascript from Java is via
the WebView's loadUrl method.

while ((byteCount = in.read(byteBuffer, 0, BUFFER_SIZE)) != -1) {
        out.write(byteBuffer, 0, byteCount);

        cumByteCount += byteCount;
        int percentDowloaded = (cumByteCount * 100) / contentLength;
        Log.i(LOG_TAG, "percent: " + percentDowloaded);
        webview.loadUrl("javascript:updateDownloadProgress('" +
percentDowloaded + "')");
}
out.flush();

If so, then while calling Java from Javascript is synchronous, calling
Javascript from Java is always asynchronous since loadUrl is
asynchronous.

I notice that all of my webview.loadUrl calls get queued up and don't
get executed until the whole file has been downloaded.  Is there any
trick to make the webview execute my javascript immediately instead of
queuing everything up?
--~--~---------~--~----~------------~-------~--~----~



Webview question: Is it possible to execute Javascript from Java synchronously?

by Mark Murphy » Tue, 07 Apr 2009 02:58:17 GMT


 


Sure! Use a thread.

the UI thread. Instead, do the download in a background thread, then use
Handler or runOnUiThread() or something to get the loadUrl() calls to
run on the UI thread.

Now, I haven't tried this specifically with WebView and loadUrl(), but
you get the results you are seeing from any regular widgets, so I am
guessing it is the same problem.

-- 
Mark Murphy (a Commons Guy)
 http://commonsware.com  |  http://twitter.com/commonsguy 

Android App Developer Training:  http://commonsware.com/training.html 

--~--~---------~--~----~------------~-------~--~----~


Sponsored Links


Webview question: Is it possible to execute Javascript from Java synchronously?

by j » Tue, 07 Apr 2009 03:38:56 GMT


 Mark, your suggestion makes sense.  I tried it.  I created a separate
thread for downloading and uses a Handler to loadUrl instead of
calling loadUrl directly.

But the result is the same.  The loadUrl executions get queued up.  It
appears the downloading thread seems to have priority over the Handler/
UI thread.

Thanks.





--~--~---------~--~----~------------~-------~--~----~



Webview question: Is it possible to execute Javascript from Java synchronously?

by Mark Murphy » Tue, 07 Apr 2009 03:43:08 GMT


 


Hmmmm...you could try calling setPriority() on the background Thread to
try to ensure the UI thread gets more love.

-- 
Mark Murphy (a Commons Guy)
 http://commonsware.com  |  http://twitter.com/commonsguy 

Warescription: Three Android Books, Plus Updates, $35/Year

--~--~---------~--~----~------------~-------~--~----~



Webview question: Is it possible to execute Javascript from Java synchronously?

by j » Tue, 07 Apr 2009 04:22:04 GMT


 Mark,

I have a nastier solution:
Put inside the while loop:
                try {
                        Thread.sleep(100);
                } catch (Exception e) {}

It works.





--~--~---------~--~----~------------~-------~--~----~



Other Threads

1. Creating a .jar Library

Do I have to do anything special to create a .jar library with
Android?  I'm simply creating an Android Project and then doing
"Export Jar".

I'm able to do "Add External Jar" and I can compile fine.  When I run,
the classes are unresolved so I crash. (null exception...)

I tried exporting as a "Runnable Jar", but the "Finish" button is
greyed out.  Perhaps I need to create a different project to use a
runnable jar?

Thanks in advance!

-- 

2. posibility of Video calls in android

Does android support video calls?

Is any api is there to achive video call?
Please need help ,on which version of android os video calls are possible.

-- 
Regards,
Narendra
.

-- 

3. No Texting While driving .....

4. Regarding Image View

5. Custom Scroll bar

6. Cross-Compiling bash for Android using toolchain - compile errors. Please help.

7. Streaming buffer problem