嗨,我有这个活动代码:
public class WebActivity extends ActionBarActivity {
TextView number;
WebView mWebView;
CountDownTimer mTimer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
number = (TextView) findViewById(R.id.number);
mTimer=new CountDownTimer(10000, 1000) {
String[] myArray={"javascript:document.getElementById(\"utente\").value=\""+LoginActivity.username+"\"; document.getElementById(\"j_password\").value=\""+LoginActivity.password+"\"; document.querySelector(\"input[type=submit]\").click();","javascript:document.getElementById(\"menu-servizialunno:_idJsp14\").click();"};
int currentIndex=0;
public void onTick(long millisUntilFinished) {
number.setText("seconds remaining: " + millisUntilFinished / 1000 + " " + (currentIndex + 1) + "/" + (myArray.length + 1));
}
//code comment start
// i think this part could be written better
// but it works!!
public void onFinish() {
if (currentIndex<myArray.length) {
number.setText("done!");
mWebView.loadUrl(myArray[currentIndex]);
currentIndex++;
mTimer.start();
} else{
mTimer.cancel();
}
}
//code comment end
};
mTimer.start();
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebSliderWebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(mWebView, url);
Toast.makeText(getApplicationContext(), "Done!", Toast.LENGTH_SHORT).show();
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(getApplicationContext(), "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
});
mWebView.loadUrl("http://www.ss16374.scuolanext.info");
}
和这个js函数:
function voti( showSubject, showData, showVote ){
var votitotali = []
document.getElementById("menu-servizialunno:_idJsp14").click();
setTimeout(function(){
elems = document.querySelectorAll("td, legend");
for(var i = 0; i < elems.length; i++){
curText = elems[i].innerHTML;
if( elems[i].tagName == "LEGEND" && showSubject ){
votitotali += [curText]
//console.log( curText );
}else if( elems[i].innerHTML.indexOf("Voto") != -1 && showVote ){
votitotali += [curText.replace(/.*\(([0-9\.]+)\)/,"$1")]
//console.log( curText.replace(/.*\(([0-9\.]+)\)/,"$1") );
}else if( /\d{2}\/\d{2}\/\d{4}/.test(elems[i].innerHTML) && showData ){
votitotali += [curText.replace(/.*(\d{2}\/\d{2}\/\d{4}).*/,"$1")]
//console.log( curText.replace(/.*(\d{2}\/\d{2}\/\d{4}).*/,"$1") );
}
}
document.getElementsByClassName("btl-modal-closeButton")[0].click()
},3000);
return votitotali
}
我可以在我的Android应用中存储votitotali
数组吗?因为我需要从网站获取一些信息,我必须在应用程序中的textView上打印它们,但我真的不知道如何使用webview ...
答案 0 :(得分:4)
这实际上很容易。您需要注入一个Java对象,该对象具有接收数组的方法:
class MyReceiver {
@JavascriptInterface
public void receive(String[] input) {
// input is your data!
}
}
// At the very beginning
mWebView.addJavascriptInterface(new MyReceiver(), "receiver");
// ...
然后,如果你在JavaScript代码中这样称呼它:
receiver.receive(voti( ... ));
您将获得MyReceiver.receive
内的数组。
请注意,非字符串数组元素(例如数字)不会转换为字符串,而是由null
代替。