やまものブログ

メモ書きブログです (^_^;A

ADT (Android Developer Tools) ”Building Your First App” 2番目のサンプル

Building Your First App は、下記の4つのセクションに分かれています。
    Creating an Android Project
    Running Your Application
    Building a Simple User Interface
    Starting Another Activity

前々回+前回で動作を確認できたのは最初の2つです。
    Creating an Android Project
    Running Your Application

今回は、残りの2つを無事に実行できました。
    Building a Simple User Interface
    Starting Another Activity

いきなり実行結果ですが、エミュレータの動作はこんな感じです。
まず、メッセージを入力して、"Send"ボタンをクリックします。
イメージ 1

すると、新しい画面に切り替わって、メッセージが表示されます。
イメージ 2

最初のメッセージを入力する動作が、
    Building a Simple User Interface
に解説されていて、次にそれを改めて表示する動作が
    Starting Another Activity
に解説されています。

今回は大量のエラーに悩まされました
そのほとんどの原因はこれ↓です。
    appcompat_v7

これは下記のとおり、Packge Explorer で1番目に登場します。
イメージ 3

今回作成しているアプリ MyFirstApp が appcompat_v7 に関与すると、コードやリソースにエラーが多発します。一部、メモしていたエラーメッセージで下記のようなものがありますし、これ以外にもありました。
Duplicate id @+id/image, already defined earlier in this layout
This class should be public (android.support.v7.internal.widget.ActionBarView.HomeView)

appcompat_v7 は検索すると数多くヒットします。とりあえず、これを取り除くには古いAndroidをサポートしない設定にすればよいようです。
ということで、今まで使っていた workspace を捨てて、最初からやり直しました。やり直すにあたって、唯一変更したのは、Android Project (MyFirstApp)を作成する際に、”Minimum Required SDK” の選択に、デフォルトの "API 8: Android 2.2(Froyo)" ではなく、自分が実際に使う予定の "API 18: Android 4.3 (Jelly Bean)"を指定したことです。appcompat_v7 を使わずに済むバージョンがどこから先かは分かりませんが、とりえず、4.3 では appcompat_v7 が現れない状態でプロジェクトを作成することができました。


これだけ気をつければ、あとは、多少迷うことがあっても、大きくハマることはないと思いますが、これ以外に記載と異なった点を列挙します。
  • fragment_main.xml が存在しない。activity_main.xml に読み替えてOK
  • Create the Second ActivityNew Activity 作成メニュー (Figure 1. The new activity wizard in Eclipse.) の項目が一部存在し無かった。具体的には "Fragment Layout Name:" とあともう一つ無かったはずです。これは、気にせず先に進んでOK
  • これの少し下にコードが掲載されている DisplayMessageActivity のデフォルト記述が微妙に異なった


最終的に動作を確認できた状態でのコードは下記のとおり。

Java コード2つ:

MainActivity.java
イメージ 9


DisplayMessageActivity.java
イメージ 4


XML コード4つ:

activity_main.xml
イメージ 5


activity_display_message.xml
イメージ 6


strings.xml
イメージ 7

AndroidManifest.xml
イメージ 8

きっと、ADT のバージョンが変わると、変更になる記述がポロポロと出てくるのでしょう。
ということで、今回の ADT のバージョンは以下のとおりです。
イメージ 10

JavaXML も経験がほとんど無いので、トレーニングの解説にある Java コードの断片を XML ソースに貼り付けたり、その逆をもあったりで、いかに自分が分かっていないかを思い知りました


最後に、Eclipse 上での操作などに関するメモ2つ。

java, xml ソースコードで、左のカラムに X 印がある場合の対処方法
クリックすると、解決策がポップアップでリストされる場合があります。
今回の場合、リストされた最初の項目(Import …)をダブルクリックすることで、以下4箇所でのエラーが解消されました。
1) DisplayMessageActiveity.java の "Intent intent ..." の行
2) DisplayMessageActiveity.java の "TextView textView ..." の行
3) MainActivity.java の "public void sendMessage(View view) {" の行
4) MainActivity.java の ”Intent intent = new ...”の行

XML 記述で謎のエラーに遭遇
そのエラーは、見やすくするため入れた空行を削除することで解消されました。今、改めて空行を入れても問題は再現できません。今回は下記のエラーも多発していて、これが謎のエラーと関係あるかもしれません。
Status ERROR: com.android.ide.eclipse.adt code=0 Exception in checkAndLoadTargetData. java.lang.NullPointerException
:中略
# A fatal error has been detected by the Java Runtime Environment:

Java のバージョンアップとか、apt-get のデフォルト以外の Java を使うことも検討しないといけませんね 『10日でおぼえるAndroidアプリ開発入門教室』をおさらいするという本来の目標からどんどんかけ離れているような気が。。。