Android webView中无法显示Twitter主页

来源: http://android.auaudata.com/android16webviewtwitter.html

亲自测试通过

ANdroid1.6一下的用法值得学习

 

AndroidアプリでWebページを表示する場合、画面全体に表示してよいなら、標準のブラウザにインテント(Intent)を投げればよいのですが、画面の一部にWebページを表示したい場合、webViewを使用することになるはずです。

ここで問題が発生する場合があります。

いずれの時期には解決するかもしれませんが、2011年9月上旬時点、L-04Cにて、Twitterを表示させようとすると、リングのマークがずーとグルグル回った画面が表示され、それ以降、ページが表示されない不具合があります。

どうやらこの問題に対しては、ググると、

webView.getSettings().setDomStorageEnabled(true);

で解決するらしいのですが、Android1.6以降を対象とした場合には、このメソッドを使うことができません。

Android1.6の端末は少なくなってきているものの、まだまだ使われているので、よほどのことがない限り、1.6でも動作させたいと思っていました。

これの対処方法をずーと調べていました。

すると、こちらの記事で解決することになるのですが、

Backwards compatibility in Android

説明がないと分かりづらいので簡単に説明します。

キーワードは「後方互換性」です。

簡単に言うと、ソフトウェアを資産として活用できるようにするため、昔のバージョンで書いたコードは新しいバージョンでも動かせるよ!というのを「後方互換性がある」といいます。

解決策は、後方互換性を考慮してプログラムを書けばよい・・・です。

今回の場合、Android1.6でも構文エラーにならなくて、Android2.1以降の場合、

webView.getSettings().setDomStorageEnabled(true);

と同様の設定をしてあげればよいです。

最後にこれを実現するソースコードを掲載します。
(上記参考記事のページにはいくつもソースコードが掲載されていて、どれを使えばよいかが迷うので、実際に使えたものを掲載しておきます)


WebSettings webSettings = webView.getSettings();
try
{
// enable Dom Storage (API lvl 7)
Class[] setDomStorageEnabledSignature = new Class[] { boolean.class };
Method setDomStorageEnabled = webSettings.getClass()
.getMethod("setDomStorageEnabled", setDomStorageEnabledSignature);
setDomStorageEnabled.invoke(
webSettings, new Object[] { Boolean.valueOf(true) });
}
catch (NoSuchMethodException ex)
{
Log.i("YourLogTag", "Dom storage not available.");
}
catch (InvocationTargetException ex)
{
// oops something went wrong. Handle that here
}
catch (IllegalAccessException ex)
{
// oops something went wrong. Handle that here
}

你可能感兴趣的:(android,Web,object,api,Class,twitter)