basedexclassloader classnotfoundexception

Android

basedexclassloader classnotfoundexception

開発中のAndroidアプリが、上記のエラーが出てスタートできなくなってしまいました。。。

Build PathにてAndroid Private Libraryを手動で追加するとなおる、という情報があります。
http://kokufu.blogspot.jp/2013/05/eclipse-adt-ver-22-class-not-found.html

これでなおる時もあるかと思いますが、私の場合は利用していないAdmobを実装するためのリスナー

 AdListener

をimplementsしていたために、このエラーが起きていました。

Adlistenerの利用を止めたらちゃんと実行できるようになりました。

ちなみに、Admobに関する試行錯誤はこちら↓
The constructor AdRequest() is not visible

at com.google.android.gms.maps.SupportMapFragment.onSaveInstanceState(Unknown Source)

Android

at com.google.android.gms.maps.SupportMapFragment.onSaveInstanceState(Unknown Source)

上記のエラーが出てGoogle MapのFragmentを表示するところで落ちてしまいます。
Logcatに表示されるエラーは下記の通り…。

08-21 12:31:40.822: E/AndroidRuntime(2831): FATAL EXCEPTION: main
08-21 12:31:40.822: E/AndroidRuntime(2831): java.lang.NoSuchMethodError: android.os.Bundle.getClassLoader
08-21 12:31:40.822: E/AndroidRuntime(2831): at com.google.android.gms.maps.SupportMapFragment.onSaveInstanceState(Unknown Source)

Google Mapのバグですかね?
http://code.google.com/p/gmaps-api-issues/issues/detail?id=5614

仕方がないので、とりあえず下記のようにソースコードに書いておいて、応急処置です。

 @Override
 protected void onSaveInstanceState(Bundle outState) {
 
 }

application/octet-stream

Android

application/octet-stream

画像のアップロードフォームで、ファイルタイプがapplication/octet-streamで、画像として認識できずアップロードできない、という問題がありました。
ファイル自体の拡張子は、jpgとなっているのにも関わらずです。

application/octet-streamとは何かというと、

意味:
application/octet-streamとはContent-Type?ヘッダにおいてバイナリ形式である場合に指定されるサブタイプのこと。

アプリケーションが何か判断できないとき、またはそのアプリケーション独自のファイル・タイプ?であるため判別できない場合も使われる。

だ、そうです。

出典:
http://www23.atwiki.jp/sevenlives/pages/137.html

で、これはどこで遭遇したかというと、Experiaでブラウザから画像ファイルを投稿する時にこれになっちゃってたんですね。
アプリで撮った写真だからでしょうか?!

プログラムの色々なところを、ファイルタイプを見るのではなくて拡張子を見るように変更して解決しました。

apple-touch-iconの設定の仕方 iOS7版

iPhone

Webクリップ(Web Clip)アイコン apple-touch-iconの設定の仕方 iOS7版 まとめ

apple-touch-iconの設定の仕方については、いろんなサイトに記述がありますが、間違っているのか、古いのか、実際の決められた仕様にのっとっていない情報が多かったので、書いておきます。
apple-touch-iconを設定したけどぼやけた画像になってしまう!とお悩みの方は、おそらく古い解像度で作ってます。
ちなみにこれは2014年3月7日時点の情報です。

作るべきapple-touch-iconのサイズは、次の通りです。

iPhoneおよびiPod touch

120×120ピクセル
60×60ピクセル(標準解像度)

iPad

152×152ピクセル
76×76ピクセル(標準解像度)

ここまでのWebクリップ(Web Clip)アイコンに関するiOSの公式サイトのリンクは下記。
https://developer.apple.com/jp/devcenter/ios/library/documentation/userexperience/conceptual/mobilehig/WebClipIcons/WebClipIcons.html

で、それらのアイコンを作って、

 apple-touch-icon-76x76.png

という名前をつけておいてWebサーバーのルートにおいておけばも、デバイスが勝手に認識してくれるようですが、より確実を期したい場合は、htmlにリンクを張った方がいいですね。
次のように書きます。

 <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
 <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
 <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120.png">
 <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">

HTMLのリンクに関する書き方はこちら

Configuring Web Applications
https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html#//apple_ref/doc/uid/TP40002051-CH3-SW4

ですが、サーバーのエラーログで、

 File does not exist: /public_html/apple-touch-icon-precomposed.png

とかが出まくったりします。
apple-touch-icon-precomposed.pngというのも用意しないといけないようです。

precomposedとは何かというと、ツヤなしのアイコンです。

「ツヤは勝手にiPhoneがつけるのに?ツヤなしの画像をおかないといけないの?」
と疑問に思いますが、ツヤあり、ツヤなしで画像を分けたい人はともかく、そうでなければapple-touch-icon.pngをコピペして、apple-touch-icon-precomposed.pngとリネームすればいいと思います。

で、それをサイズ別に作ります。
サーバーのルートにアップロードし、リンクを張ります。

 <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-precomposed.png"/>
 <link rel="apple-touch-icon-precomposed" sizes="76x76" href="/apple-touch-icon-76x76-precomposed.png">
 <link rel="apple-touch-icon-precomposed" sizes="120x120" href="/apple-touch-icon-120-precomposed.png">
 <link rel="apple-touch-icon-precomposed" sizes="152x152" href="/apple-touch-icon-152x152-precomposed.png">

だいぶ面倒ですね。

まとめ

まとめますと、作る画像は次の通り。

 apple-touch-icon.png
 apple-touch-icon-76x76.png
 apple-touch-icon-120.png
 apple-touch-icon-152x152.png

張るリンクは次の通りです。

 <link rel="apple-touch-icon" href="/apple-touch-icon.png"/>
 <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
 <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120.png">
 <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
 <link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-precomposed.png"/>
 <link rel="apple-touch-icon-precomposed" sizes="76x76" href="/apple-touch-icon-76x76-precomposed.png">
 <link rel="apple-touch-icon-precomposed" sizes="120x120" href="/apple-touch-icon-120-precomposed.png">
 <link rel="apple-touch-icon-precomposed" sizes="152x152" href="/apple-touch-icon-152x152-precomposed.png">

間違っていれば、ご指摘ください。

android.widget.LinearLayout cannot be cast to android.widget.Button

Android

android.widget.LinearLayout cannot be cast to android.widget.Button

レイアウトのxmlファイルも、Acivityでも、ButtonをLinearLayoutなどにキャストしていないのに、なぜか上記のようなエラーが出ました…。
??と思い検索すると

http://stackoverflow.com/questions/11792109/linearlayout-cannot-be-cast-to-android-widget-button

にて、Clean→Buildしたらなおるよ~

と。

本当に治りました。

どっかでそんなキャストしてるのかな?と調べた時間がなんと無駄なことか…orz

本当に、ADTのバカ~[sad]

「バカバカバカバカっ。」
「そんなに怒るなよ…今度、オマエが行きたがってたレストランに連れて行ってやるからヨ」

という本宮ひろ志のマンガに出てくる女泣かせの主人公的なキャラのADTでも妄想して怒りをしずめたいと思います。