2011年09月29日

AndroidのClassNotFoundExceptionはAndroidManifest.xmlを疑え

本日は、少しだけ慣れてきたAndroid学習者の体験するエラー対処と原因を紹介することにする。首記のClassNotFoundExceptionとはその名の通り、クラスが見つかりませんというJava標準の例外でり次の様にAndroidのLogCatに出力される。



09-28 09:04:24.618: DEBUG/AndroidRuntime(750): Shutting down VM
09-28 09:04:24.628: DEBUG/dalvikvm(559): GC freed 2 objects / 48 bytes in 564ms
09-28 09:04:24.628: WARN/dalvikvm(750): threadid=3: thread exiting with uncaught exception
(group=0x4000fe70)
09-28 09:04:24.638: ERROR/AndroidRuntime(750): Uncaught handler: thread main exiting due to
uncaught exception
09-28 09:04:24.737: ERROR/AndroidRuntime(750): java.lang.RuntimeException: Unable
to instantiate activity ComponentInfo{jp.gr.java_conf.mire.droid.ui.oxgame.withoxgamewidget
/jp.gr.java_conf.mire.droid.ui.oxgame.withoxgamewidgetoxgamewidget
.OXgameWithOXGameWidgetActivity}: java.lang.ClassNotFoundException:jp.gr.java_conf
.mire.droid.ui.oxgame.withoxgamewidgetoxgamewidget.OXgameWithOXGameWidgetActivity in loader dalvik.system.PathClassLoader@43598cf8
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.ActivityThread.performLaunchActivity
(ActivityThread.java:2194)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.ActivityThread.handleLaunchActivity
(ActivityThread.java:2284)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.ActivityThread.access$1800
(ActivityThread.java:112)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.ActivityThread$H.handleMessage
(ActivityThread.java:1692)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.os.Handler.dispatchMessage
(Handler.java:99)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.os.Looper.loop(Looper.java:123)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.ActivityThread.main
(ActivityThread.java:3948)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at java.lang.reflect.Method.invokeNative
(Native Method)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at java.lang.reflect.Method.invoke
(Method.java:521)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at com.android.internal.os.ZygoteInit
.main(ZygoteInit.java:540)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at dalvik.system.NativeStart.main
(Native Method)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): Caused by: java.lang.ClassNotFoundException: jp.gr.java_conf.mire.droid.ui.oxgame.withoxgamewidgetoxgamewidget
.OXgameWithOXGameWidgetActivity in loader dalvik.system.PathClassLoader@43598cf8
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at dalvik.system.PathClassLoader.findClass
(PathClassLoader.java:243)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at java.lang.ClassLoader.loadClass
(ClassLoader.java:573)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at java.lang.ClassLoader.loadClass
(ClassLoader.java:532)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.Instrumentation.newActivity
(Instrumentation.java:1097)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2186)
09-28 09:04:24.737: ERROR/AndroidRuntime(750): ... 11 more
09-28 09:04:24.783: DEBUG/MediaScannerService(698): done scanning volume external
09-28 09:04:24.867: DEBUG/MediaScannerService(698): start scanning volume external
09-28 09:04:24.924: INFO/Process(592): Sending signal. PID: 750 SIG: 3
09-28 09:04:24.947: INFO/dalvikvm(750): threadid=7: reacting to signal 3
09-28 09:04:25.197: INFO/dalvikvm(750): Wrote stack trace to '/data/anr/traces.txt'
当方の場合、Androidのログ解析に当たっては、Eclipse上のLogCatは、不要な過去ログをクリアしておいてから、実行し、末尾の「Wrote stack trace to '/data/anr/traces.txt'」から「Shutting down VM」の行迄をシフトキーを使い選択コピーし、エディタに貼付けてからチェックしている。gEdit等では、検索キーワードを全て背景色を付けてくれるので見通しがよくなるからである。よく、Eclipseの中だけで、頑張ってログを眺めている御人も見かけるが行末が表示されていなかったりもするので、学習段階ではここにある様に特定の箇所をコピーしエディタ上で解析することを先ずはお奨めしておく。では本論に入る。
続きを読む
posted by Mire at 07:46 | Comment(0) | TrackBack(0) | Androidプログラミング | このブログの読者になる | 更新情報をチェックする

2011年09月20日

Androidをきちんと理解するには Reference を読もう

 AndroidのReferenceは、http://developer.android.com/reference/packages.html にあることは、Androidアプリを開発しようとする者ならば当然知っていることではあろう。しかし、英語であることから、中身を見ずに済ませる学習者が少くなからずいるのも事実であろう。実のところそういう自分も最近迄、あまり見ようともせずに、仕様の全容を掴むことなくテストコードの動作チェックを行ない、その反応に不思議がっていたものである。
 例えば、OnTouchListener#OnTouch() にToastを単純に組込み反応を見ると2回表示しようとする訳だが、Ontouchの引数には、MotionEvent eventの引数にEvent発生時のAction値を設定しEvent送出しているので、クリック開始時のMotionEvent.ACTION_DOWNと完了時のMotionEvent.ACTION_UPが一度の操作で発生する仕様に成っていたのである。

 ちなみにView.OnTouchListenerインターフェイスのReferenceの記述は次の通りである。英語が苦手な方でも、ちょいと無理してこの一つを読んでしまえば、他のLstenerもほとんど同じ表記なので簡単に理解出来ることに気付くはずである。
   Android Reference View.OnTouchListener - Mozilla Firefox
                       http://developer.android.com/reference/packages.html
public static interface

View.OnTouchListener

android.view.View.OnTouchListener
Known Indirect Subclasses

Class Overview

Interface definition for a callback to be invoked when a touch event is dispatched to this view. The callback will be invoked before the touch event is given to the view.

Summary

Public Methods
abstract boolean onTouch(View v, MotionEvent event)
Called when a touch event is dispatched to a view.

Public Methods

public abstract boolean onTouch (View v, MotionEvent event)

Since: API Level 1

Called when a touch event is dispatched to a view. This allows listeners to get a chance to respond before the target view.

Parameters
v The view the touch event has been dispatched to.
event The MotionEvent object containing full information about the event.
Returns
  • True if the listener has consumed the event, false otherwise.
続きを読む
タグ:android
posted by Mire at 23:50 | Comment(0) | TrackBack(0) | Androidプログラミング | このブログの読者になる | 更新情報をチェックする

【Android】 Button(View) Eventの発生順と制御

 AndroidのButtonイベントは、親のViewクラスとして実装する仕組みなので、本来なら関係なさそうなキー入力イベントもフォーカス時には機能させることが出来る。通常はClickイベントの実装のみで済ます場合がほとんどかと思うが、他のイベントの発生順やその動的制御について予め理解しておくことは、必要なことと思う。

1つButtonに実装可能なすべて のイベント実装を行ないその発生を確認し、その制御を理解する為のAndroidアプリを作成せよ そこで本稿では、それらのイベント実装を在りっだけ行ないテストしたソースを掲載する。テストに当たり、TouchイベントとLongClickイベントについては、図の如く、その返り値次第で他のイベント発生制御を確かめる為、イベント種別の返り値をCheckBoxで変更出来る様にした他、Touchイベント自体実装自体の取外しも出来る様にしている。

 尚、今回のコード作成では、Emulator環境でのテストで確認出来なかったイベントについしてはコメントにさせて頂いていることを予めお断りさせて頂いておくことにする。ついでに、表示内容の説明を追記しておく。操作と表示の関係は次の通りで、Focus時のみOnKeyListener#onKey()が発生することを先ずはカーソルキー等をクリックし理解頂きたい。

  1. アプリ起動時: OnFocusListener#onFocusChange()がhasFocus==trueで発生し、Toast表示「フォーカスを得ました」
  2. カーソルキー(↓)押下:OnKeyListener#onKey()がevent.getAction()==KeyEvent.ACTION_DOWNで発生し、Toast表示「keyCode:20 ACTION_DOWN」
  3. 同時にfocusが移動するので、OnFocusListener#onFocusChange()がhasFocus==falseで発生し、Toast表示「フォーカスを失いました」
  4. カーソルキー(↑)押下:OnFocusListener#onFocusChange()がhasFocus==trueで発生し、Toast表示「フォーカスを得ました」
  5. フォーカスのあるボタンで、カーソルキー(↑)が離されたので、OnKeyListener#onKey()がevent.getAction()==KeyEvent.ACTION_UPで発生し、Toast表示「keyCode:19 ACTION_UP」
  6. 再度カーソルキー(↑)押下:OnKeyListener#onKey()がevent.getAction()==KeyEvent.ACTION_DOWNで発生し、Toast表示「keyCode:19 ACTION_DOWN」
  7. カーソルキー(↑)を離すので:OnKeyListener#onKey()がevent.getAction()==KeyEvent.ACTION_UPで発生し、Toast表示「keyCode:19 ACTION_UP」
  8. 画面下部をクリック: OnFocusListener#onFocusChange()がhasFocus==falseで発生し、Toast表示「フォーカスを失いました」
 メインのTouch, Click, LongClickの発生については、返り値を変更しつつ、実際にご確認頂きたい。さらに、ContextMenu生成イベントについては、発生すると後順発生イベントの抑制をする仕様の為、MENUキーの中のオプションメニューで着脱出来る様な形で2011-09-24に実装させて頂いたが、本論以外のコード等も含め長くなったので、ソース上灰色表示としている。手打ちで学習確認する場合には先ずは省いて入力すると良いだろう。

お題: 「図の様に、1つButtonに実装可能な全てのイベント実装を行ないその発生を確認し、その制御を理解する為のAndroidアプリを作成せよ。尚、図ではFocusとKeyイベントのみ表示させているが、当然、ボタンのClick, LongClick時のイベント実装をしその発生順と返り値による制御を確認出来るものを作成すること。」続きを読む
posted by Mire at 03:47 | Comment(0) | TrackBack(0) | Androidプログラミング | このブログの読者になる | 更新情報をチェックする

2011年09月18日

Android ButtonのEvent記述 〜 3.「自クラスにimplements実装」

ボタン3つに対しボタンの表示名をトースト表示するAndroidアプリを作成せよ Javaは、多重承継が出来ない仕様の言語である。しかし、インターフェイスの場合は、必要なだけ、implementsして実装出来る。AndroidのButtonのEvent記述でも同様なので、Activityの実装クラスに直接実装可能という次第た。

お題: 「図の様に、ボタン3つに対しボタンの表示名をトースト表示するAndroidアプリを作成せよ。但し、イベントリスナーは直接implements実装すること。」


続きを読む
タグ:android
posted by Mire at 00:38 | Comment(0) | TrackBack(0) | Androidプログラミング | このブログの読者になる | 更新情報をチェックする

2011年09月17日

Android ButtonのEvent記述 〜 2.「内部クラス定義型」

ボタン3つに対しボタンの表示名をトースト表示するAndroidアプリを作成せよ 前稿では、「匿名のインナー型」での記述例を掲載させて頂いたが、今回は、内部クラスとしてリスナークラスを定義した記述例を記述させて頂くことにする。
 今回のものは、ボタン3つに対し同質のイベントを実装するもので、「匿名のインナー型」での記述では、同じ記述を3箇所に記述することになってしまうので最適とは言えないので、通常は、今回の様な内部クラスで記述することになる。

お題: 「図の様にボタン3つに対しボタンの表示名をトースト表示するAndroidアプリを作成せよ。但し、イベントリスナーは内部クラスで記述のこと。」

続きを読む
タグ:android
posted by Mire at 22:23 | Comment(0) | TrackBack(0) | Androidプログラミング | このブログの読者になる | 更新情報をチェックする

Android ButtonのEvent記述 〜 1.「匿名のインナー型」

mireの様に、今ではマニアックと評されるW-ZERO3のユーザからすると間延びした画面構成と太いタッチペンの横行には閉口しているが、世の流れには逆らえない。
 AndroidはJavaに独自の仕様を組込んだものであり、C言語3ヶ月、Python2週間で利用開始していたmireとしては想定以上に時間が過ぎてしまっている。単にJava手法への経験と知識の無さが原因である。
 そこで、今回、Androidにおけるボタンイベント記載方法についてテストプログラムを書き、まとめて試た次第だ。Pythonistaから見るとありえないコーディングバリエーションに驚くが、慣れるしかない。

 Androidでは、携帯端末の比較的狭い画面を指タッチで操作することを想定したGUIアプリ作成が主要なものとなる。GUIでは、画面に配置したGUI部品へのアクションに対し任意の処理を書込むもので、ほぼCUI専門でPythonプログラミングをして来たmireにとっても、その一点だけを抑えさえすれば既にAndroidプログラミングもマスターした様なものでもある。

と言うことで(笑)、本日は、そんなAndroidプログラミングのお題である。

Android Button Event でボタン名を含むToastを表示せよ GUIのイベントの起点として汎用的に用いられるものか「Button」であろう。先ずは、これだけでも押さえておけば単純な機能の創り込みて不自由することもないたろう。実際、Androidの場合、Buttonのイベント定義は承継元のViewクラスで定義されたものを用いるので、書き方さえ押さえれば、後はバリエーションとして他のGUI部品を適材適所で用いて行けば良いわけだ。

 そこで、本日は、その内、イベントリスナーの記載方法を3つを列記して行く。今回はその初回分である。

お題: 「図の様に、Buttonクリックで、ボタン名を含むToastを表示するAndroidアプリを作成せよ」

続きを読む
タグ:android
posted by Mire at 19:31 | Comment(0) | TrackBack(1) | Androidプログラミング | このブログの読者になる | 更新情報をチェックする

2011年09月11日

CentOS-6.0-x86_64に乗替 & Android SDK対応

 愛用のUbuntu10.04だが、ちょいとした気の緩みから対処を誤り導入パーティションを完全に壊してしまった。その為、このブログへの投稿も暫く途絶えてしまった次第である。

 言い訳たらたら言わせて頂くが、発端は導入した外付けUSBfハードディスクの汎用ファイル保管用(NTFS)の第一パーティションがよく壊れることから、出先のUbuntu10.04機でUSB上の/home/mireに書き込む様になったことからであった。第一パーティション同様に起動後、書き込めない症状に見舞われ、気軽にfsckをかけてしまったことが致命的な結果を生んでしまった次第である。
 そこでUbuntu10.04は1世代前の版だが、OS自体の安定度と機能には問題はなかったのでとても残念であったが、この時期に再度入れるのも気が引けたので、別の外付けUSBハードディスクを準備し、まずはUbuntu11.04を2度程導入して試た訳だが、悩ましいDeskTop対策に追われ時間は過ぎていく、おまけに、操作中のEclipseが突然落ちたり、挙句の果ては、Firefoxの操作中にUbuntu11.04自体が落ち起動BIOS画面になる始末、堪らず、最近、一世代遅れてリリースされたCentOS-6.0-x86_64をDLし、別パーティションに導入するに至った次第である。

 誤解無き様言及するが、元々Ubuntu10.04に手を出したのも、Vista機が同様に操作中や知らない内に落ち起動BIOS画面になる現象が発生したからであり、障害原因がOS自体にあると言う訳ではない。ただ、Ubuntu11.04を2度入れて試たのも、Install DVDの焼きが甘いものを使った時のOSでは何度やっても駄目なので、DLからやり直した次第である。それで少なくともVista程度の安定は確保できたことは確かだが、突然落ちるOSを我慢して使う程マゾではないので、昔サーバー用途で愛用していたCentOSに回帰しただけのことである。もう一度Ubuntu11.04もDLからやり直せば安定する可能性があるがしなかっただけのことである。

 で、今回も懲りずに「x86_64版」の導入である。x86_64の場合、一部アプリが32bit環境のみでビルド配布されている為、Linux端末用途では推奨されていない。
 Android SDKもその部類のアプリであり、特別に必要ライブラリを導入する必要がある。因みに、Ubuntu10.04の場合は「ia32-libs」を「apt-get install ia32-libs」等とすれば済むし、CentOS-6.0-x86_64の場合も同様に対処可能である。尚、利用があまりに短かったので正確ではないかも知れないがUbuntu11.04では対処不要であった。(2011-10-27 追記: wineのInstallで必要ライブラリが導入されていたからかもしれない。)
続きを読む
タグ:x86_64 Linux CentOS
posted by Mire at 07:23 | Comment(0) | TrackBack(0) | Linux | このブログの読者になる | 更新情報をチェックする
月額見放題1,000円開始キャンペーンバナー(画像ありver)
紺碧の艦隊 ルパン三世 GREAT CHASE クリックプロモーション
<< 2011年09月 >>
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
カテゴリ
タグクラウド
ファン
利用中のオープンソース
最近のコメント
最近の記事
過去ログ
QRコード
レガシーなアプリはいかが?
Dell 法人のお客様ページ
  • 【法人様向け】デル、お得なキャンペーン情報
  • 法人のお客様向け ストレージソリューション
  • 法人のお客様向け ネットワークソリューション
  • 【SOHO法人様向け】デル・オンライン広告限定ページ
  • デル-個人のお客様ページ
  • 【個人のお客様向け】デル・オンライン広告限定ページ
  • オンライン広告限定キャンペーンページ
  • ソフトウェア&周辺機器 パソコン工房
    ツートップインターネットショップ(twotop.co.jp) マウスコンピューター/G-Tune
  • ×

    この広告は1年以上新しい記事の投稿がないブログに表示されております。