生がつらい!2012年01月28日 02:43

GOアイテムの画像
GOアイテムの画像


やっと、終わった!。

今日の最後はかなり、シンドかった。

(新たに「Go」アイテムを作成する)
http://thinkit.co.jp/story/2010/06/03/1551?page=0,0

エクリプスのエラー表示を消すときに、変なことをやってしまったらしい。何度も何度も書き換えて、変数が何かに変わってしまっていることを発見して修正する(これに気づくのにほぼ2時間。エラーを消せばいいというものではない)。

コードを舐めるようにチェックして、意味を考え、バグの原因を潰していく。

うーん!、これがトンネルというものだ。プログラミングの真髄。バグ取り3年。

そして、先ほど、ようやくバグフィックスに成功!。

やはり、エクリプスの便利機能に翻弄される。仕掛けに使われてしまった。コーディングとは、極めて人間臭くかつ泥臭い仕事であることを忘れていた。

これで、無事にコピペプログラミングの成功である。完成!。

せっかくなので、全部のコードをもう一度コピーしておく。

</MyWebView/src/com/example/mywebview/MyWebView.java>

package com.example.mywebview;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MyWebView extends Activity {
private Intent intentGoActitvity;

/** Called when the activity is first created.
* @return
* @return
* @return */


public boolean onMenuItemSelected(int featureId,MenuItem item){
switch (item.getItemId()) {
case ABOUT_MENU_ID :
//Intentの作成
Intent intentAboutActitvity = new Intent(this,AboutActivity.class);
startActivity(intentAboutActitvity);
return true;
case GO_MENU_ID :
//Intentの作成
Intent intentGotoActitvity = new Intent(this,GoActivity.class);
startActivityForResult(intentGotoActitvity, GO_MENU_ID);
return true;



default :
break;
}
return super.onMenuItemSelected(featureId, item);
}
//オプション・メニューを作成する
private static final int GO_MENU_ID = Menu.FIRST+1;


private static final int ABOUT_MENU_ID = Menu.FIRST;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//URL入力ダイアログ表示メニュー・アイテム
MenuItem gotoItem = menu.add(0, GO_MENU_ID, 0 ,R.string.menu_item_name_go);
gotoItem.setIcon(android.R.drawable.ic_menu_search);



//Aboutダイアログ表示メニュー・アイテム
MenuItem aboutItem = menu.add(0, ABOUT_MENU_ID, 0 ,R.string.menu_item_name_about);
aboutItem.setIcon(android.R.drawable.ic_menu_info_details);

return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//ハンドリング対象外のリクエストは無視
if (requestCode != GO_MENU_ID) {
return;
}

//OKで以外で戻ってきたら何もしない
if (resultCode != RESULT_OK) {
return;
}

//URLが入力されたと見なしロードする
WebView webView = (WebView)findViewById(R.id.main_webview);
webView.loadUrl(data.getStringExtra(GoActivity.THE_URL));
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

WebView webView = (WebView)findViewById(R.id.main_webview);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://google.co.jp");
}
}

</MyWebView/src/com/example/mywebview/AboutActivity.java>

package com.example.mywebview;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class AboutActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_activity);
// OKボタン
Button okButton = (Button)findViewById(R.id.button_ok);
okButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
// 閉じる
finish();
}
});

}

}

</MyWebView/src/com/example/mywebview/GoActivity.java

package com.example.mywebview;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class GoActivity extends Activity {
public static final String THE_URL = "THE_URL";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.go_activity);
// OKボタン
Button okButton = (Button)findViewById(R.id.button_ok);
okButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
//Editコントロールから文字列を取得する。
EditText edit = (EditText)findViewById(R.id.url_edit_text);

//入力値をIntentの拡張項目へ登録
Intent intent = new Intent();
intent.putExtra(THE_URL, edit.getText().toString());

// 閉じる
setResult(RESULT_OK, intent);
finish();
}
});


}

}

</MyWebView/gen/com/example/mywebview/R.java>

/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/

package com.example.mywebview;

public final class R {
public static final class attr {
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int button_ok=0x7f050000;
public static final int main_webview=0x7f050002;
public static final int url_edit_text=0x7f050001;
}
public static final class layout {
public static final int about_activity=0x7f030000;
public static final int go_activity=0x7f030001;
public static final int main=0x7f030002;
}
public static final class string {
public static final int about_appname=0x7f040005;
public static final int app_name=0x7f040001;
public static final int go_edit_title=0x7f040004;
public static final int hello=0x7f040000;
/** オプション・メニュー用文字列
*/
public static final int menu_item_name_about=0x7f040002;
public static final int menu_item_name_go=0x7f040003;
}
}

</MyWebView/res/layout/main.xml>

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<WebView
android:id="@+id/main_webview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

</MyWebView/res/layout/about_activity.xml>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<!-- スペーサー -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="50dip" >

</LinearLayout>

<!-- アプリケーション・タイトル -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>

<TextView
style="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/about_appname"

/>

</LinearLayout>

<!-- スペーサー -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="50dip" >
</LinearLayout>

<!-- OKボタン -->

<Button android:id="@+id/button_ok"
style="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text=" OK "
/>
</LinearLayout>

</MyWebView/res/layout/go_activity.xml>
元ネタでは、スペーサーの高さの定義の後の">"が抜けていた。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<!-- スペーサー -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="50dip">
</LinearLayout>


<!-- エディット・コントロールのタイトル -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
style="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/go_edit_title"
/>
</LinearLayout>

<!-- エディット・コントロール -->
<EditText
android:text="http://"
android:id="@+id/url_edit_text"
android:hint="URL"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginBottom="20dip"
>
</EditText>


<!-- Go ボタン -->
<Button
android:id="@+id/button_ok"
style="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text=" OK "
/>
</LinearLayout>

</MyWebView/res/values/strings.xml>

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="hello">Hello World, MyWebView!</string>
<string name="app_name">MyWebView</string>
<!-- オプション・メニュー用文字列 -->

<string name="menu_item_name_about">About</string>
<string name="menu_item_name_go">Go</string>
<string name="go_edit_title">Where do you want to go today?</string>

<string name="about_appname">MyWebView Version.1.0.0</string>



</resources>

</MyWebView/AndroidManifest.xml>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mywebview"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="4" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MyWebView"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AboutActivity">
</activity>
<activity android:name=".GoActivity">

</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

</manifest>

これだけの定義体で、とりあえず動くブラウザーができる。ちなみに、apkファイルの大きさは、なんと18キロバイトである。有難い時代になったものだ。

最終回はさすがに、生中継をする余裕はなかったが、せっかく開発環境を(ただで)手に入れたのだから、もう少しまともに使えるようになったら、アンドロイドマーケットに出せるようなものを作ってみたいものだ(コピペで・・・)。

R.javaな話2012年01月28日 03:36

Goメニューを追加
Goメニューを追加


ちょっとハズカシイ話だ。
http://kfujito2.asablo.jp/blog/2012/01/27/6309000

R.javaのカラーコードと思っていたのは、実は識別値だってこと。

(ありがたいページ)
http://d.hatena.ne.jp/corrupt/20110512/1305186977

(実際の自動生成の様子)
http://www.javadrive.jp/android/xml_layout/index2.html

一生懸命コピーしたり、色コードだと思って解析したりして損した。でも、このファイルができるおかげで、便利になっているので、R.javaに感謝である(二度とコピーしないけど)。

(こんな記事も)
http://techbooster.jpn.org/andriod/environment/5796/

(自動ビルドで自動生成)
http://androidon.jp/sippai/rjava/

皆さん、R.javaを大切にね!。

安卓平板2012年01月28日 16:31

安卓平板
安卓平板


今日は日本での今年初めての土曜休みの日。

ルンルン気分でアキバにGO!。

こんなお店に行ってみた。

(店の名前が分からないホームページ)
http://shop.apadjp.com/

で、探していたのはこれ!

(パラディン:騎士)
http://shop.apadjp.com/products/detail.php?product_id=174

(メーカーのサイト)
http://www.ainol.com/plugin.php?identifier=ainol&module=product&action=info&productid=43

怪しげな中華パッドにICSが載っている。当然在庫なし、当然2月中旬入荷予定、当然千客万来、当然待ちきれない、当然、そのまま帰ってきた。

店に在庫のある商品の価格は、2万5千円位。めちゃくちゃ安いわけではなく、アマゾンで買うより若干値引きしてある程度。

秋葉原中央通り沿いにある(8階だけど)、中華パッド専門店だ。店には、中華パッドを支えるアームの類が豊富においてある。7千円位。7インチのタブレット端末を、家の中で手ブラで使うのが流行りなのか?。

まあ、いい。

ちょっと欲求不満になったので、某量販店でアスースのTF201Tをいじってくる。やはり、速い。テグラ3は伊達じゃない。早く高解像度版(盤?)を出して欲しい(当然、ICS)。

ブックセンターで、開発本を買い求める。

(作りながら覚えるAndroidプログラミング)
http://www.amazon.co.jp/%E4%BD%9C%E3%82%8A%E3%81%AA%E3%81%8C%E3%82%89%E8%A6%9A%E3%81%88%E3%82%8BAndroid%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E6%95%B4%E3%81%88%E6%96%B9%E3%81%8B%E3%82%89%E3%80%81Android%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E3%81%A7%E3%81%AE%E5%85%AC%E9%96%8B%E3%81%BE%E3%81%A7%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88-%E6%9D%BE%E5%B2%A1-%E5%AE%A3/dp/4797362790

何種類か、ぱらぱらめくってみて、飽きずに読めそうで、かつ、私でもなんとかなりそうな本を探す。JAVA屋さんが書いている本が多くて、そっちに話がいきすぎるとツライ。かといって、開発環境をインストールしてサンプルプログラムを動かしておしまい、というレベルは卒業している。プロのプログラマーではなく、少しだけJAVAのコードが読めて、手っ取り早く、とにかく動くアプリが作れそうな本を選んだ。

どうも、ゲームアプリを作るのが流行っているようで、解説本の半分近くがゲームの関係だった。金になるし、なにより面白そうだ。が、私はやらない。かつて、ゲームにハマって体調を崩したことがあり、以来、近寄らないようにしている(君子なので・・・?)。

今日からは、じっくりと腰を据えて、アンドロイドのアプリをいじり倒すかな(コピペして・・・)。