私はWebViewに基づいていくつかのシンプルなアプリケーションを開発しようとしており、アンドロイドアプリとリモートページの間でデータを交換できるようにしています。外部からonCreateで宣言されたWebviewにアクセスする方法は?
問題の説明:
loadUrlはのonCreateの中に動作しますが、のonCreateの外から働いていません。それはWebAppInterfaceクラス内で作業していない理由を、以下のコードを見て、私が間違っているのかを説明してください:
public class MainActivity extends Activity {
public WebView view1;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String url = "htxx://mydomain.com/";
final WebView view1 =(WebView) this.findViewById(R.id.webView);
view1.addJavascriptInterface(new WebAppInterface(this), "Android"); //exchange between web-js and webview
WebSettings webSettings = view1.getSettings();
webSettings.setJavaScriptEnabled(true);
view1.loadUrl(url);
view1.setWebViewClient(new com.example.project.MyAppWebViewClient() {
@Override
public void onPageFinished(WebView view1, String url) {
findViewById(R.id.progressBar1).setVisibility(View.GONE);
findViewById(R.id.webView).setVisibility(View.VISIBLE);
}
});
view1.setInitialScale(100);
///// ---> That's works:
view1.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
view1.loadUrl("javascript:somescript('Page is loaded')");
}
});
///// ---> That's works too:
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String device_id = tm.getDeviceId();
view1.loadUrl("javascript:somescript('"+device_id+"')");
}
});
}
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void showToast(String toast) {
//show toast from web-app (js to android)
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void printFromWeb() {
//show toast from web-app (js to android)
///// ---> That's NOT working :(
view1.loadUrl("javascript:somescript('Checking loadurl from outside of onCreate')");
}
}
}
興味深い、いないエラーがAndroidのスタジオで発生していること。
はどうもありがとうございました、今それが仕事です!しかし、私はあなたの最後の勧告を理解していない、と私はlogcatで同じメッセージを(説明したように)得る:_Warning:WebViewメソッドがスレッド 'WebViewCoreThread'で呼び出されました。すべてのWebViewメソッドは、UIスレッドで呼び出す必要があります。 WebViewの将来のバージョンは他のスレッドでの使用をサポートしていない可能性があります。_ – deeplay
@deeplay、問題は外部UIスレッドからのView子孫の呼び出しメソッドがルールを破っていることです。 [http://nickthecoder.wordpress.com/2013/01/31/updating-ui-from-another-thread-in-android](ここ)は、それをもっとはっきりさせるべきです。その間、関連するスニペットで投稿を更新します – xAF
_ [OOPS!そのページは見つかりません。](https://nickthecoder.wordpress.com/2013/01/31/updating-ui-from-another-thread-in-androi%E2%80%8C%E2%80% 8Bd)_ – deeplay