0

サーバーからダウンロードされた HTML Web ページを含む Web ビューがあり、動的データを入力して、この Web ページに情報の行を追加します。その Web ページで次のコードを使用して、javascript を有効にしました。

    class JSClass {
    Context jsContext;
    JSClass(Context c){
        jsContext = c;
}
public void getHTMLContent(String info)
{
    Log.i(TAG, "Info: "+info);
}
}

WebView webview = (WebView) findViewById(R.id.webView);
webview.loadDataWithBaseURL("", htmlcontent, "text/html", "utf-8", "");
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.addJavascriptInterface(new JSClass(this), "Android");
webview.loadUrl("javascript:"+
    "var rows = document.getElementsByClassName('info');"+
    "if(rows !== null){"+
    "for(var i=0;i<rows.length;i++){"+
    "rows[i].onclick = function(){"+
    "var workId = 0;"+
    "workId = parseInt(this.cells[0].innerHTML);"+
    "window.Android.getHTMLContent(workId);"+
    "}}}"
);

行をクリックすると、行データに応じてサーバーから画像をダウンロードするという意図があります。最初のクリックでは問題なく動作しますが、2 回目のクリックでアプリケーションがエラーなしで終了します。理由がわかりません。助けてください。前もって感謝します

4

2 に答える 2

0

最後に!!それを修正しました..アダプターは、以前にダウンロードした画像と、2回目のクリックでダウンロードした画像を保持していました.なぜアプリケーションがメモリリークも発生せずに閉じていたのかわかりません..とにかく、使用後は正常に動作しています

adapter.clear();

または、すべての画像サムがダウンロードされた後にアダプターを null に再初期化します (これが非常に効率的かどうかはわかりません)。アダプターをクリアした後、

adapter.notifyDataSetChanged();
于 2013-06-29T10:46:10.760 に答える
0

loadDataWithBaseURLの代わりにもう一度使用する必要があると思いますloadUrl

このリンクを参照してください。次のように説明するセクションがありloadDataます。

JavaScript の同一生成元ポリシーは、このメソッドを使用してロードされたページで実行されているスクリプトが、「http(s)」を含む「データ」以外のスキームを使用してロードされたコンテンツにアクセスできないことを意味することに注意してください。この制限を回避するには、適切なベース URL で loadDataWithBaseURL() を使用します。

于 2013-06-28T14:08:41.023 に答える