org.apache.http.conn.scheme.SchemeパッケージのSchemeRegistryクラスは、
"http"や"https"のようなプロトコルスキームを登録するクラスです。

※このクラスは、DefaultHttpClientクラスを使用する際に必要になります

インスタンス作成後、スキームを登録するには、SchemeRegistry.register()を呼び出します。

具体的なサンプルコードは、以下のとおりです。

final SchemeRegistry schemeRegistryRegistry = new SchemeRegistry();
schemeRegistryRegistry.register(
    new Scheme(HttpHost.DEFAULT_SCHEME_NAME, // "http"
        PlainSocketFactory.getSocketFactory(),
        80));    // ポート番号

 ちなみに、SchemeRegistry.register()の引数には、
同(org.apache.http.conn.scheme.Scheme)パッケージのSchemeインスタンスを渡す必要があるのですが、
上記のような引数を渡せば、インスタンス化できます。

※PlainSocketFactoryも、同(org.apache.http.conn.scheme.Scheme)パッケージのクラスです

org.apache.http.paramsパッケージのBasicHttpParamsクラスは、
HTTPバージョンやキャラクタセットなどのHTTPプロトコルパラメータを保持するクラスです。

※このクラスは、SingleClientConnManager/ThreadSafeClientConnManagerや、DefaultHttpClientクラスを使用する際に必要になります

インスタンス作成後、パラメータを設定するには、
同(org.apache.http.params)パッケージのHttpProtocolParamsクラスを使用します。

具体的なサンプルコードは、以下のとおりです。

final HttpParams httpParams = new BasicHttpParams();
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);    // HTTP 1.1
HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);        // UTF-8

ちなみに、
HTTPバージョンは、org.apache.httpパッケージのHttpVersionクラスの定数である
HTTP_0_9、HTTP_1_0、HTTP_1_1(通常はコレ)を利用できます。

また、
キャラクタセットには、org.apache.http.protocolパッケージのHTTPクラスの定数である
DEFAULT_CONTENT_CHARSET("ISO-8859-1")や、UTF_8("UTF-8")
などを利用できます。

※RESTサービスの多く(Flickr、Picasa、YouTube、Twitter)は、UTF-8です

お勧めのAndroidサンプルアプリケーションは、apps-for-androidです。

入手先は、こちら(http://code.google.com/p/apps-for-android/)。
※Project ownersは、Google先生です。

apps-for-androidには、いくつかのプロジェクトが含まれているのですが、
この中でも超お勧めが、Photostreamという、Android版Flickrクライアントです。

Androidで、Flickr、Picasa、TwitterとかRESTクライアントを作ろうとう方々には、大変よい入門書(ソースコード)になると思います。

ちなみにソースコードは、リンク先のSourceタブのsvnパスを、SVNクライアントでダウンロードできます。
※Windowsの場合、TortoiseSVNがお勧め) 

[Android] ActivityNotFoundException

| トラックバック(1) |

startActivity()でアクティビティを開始したが、

Suspended exception ActivityNotFoundException

と表示される場合、

AndroidManifest.xmlのApplication Nodesに、

目的のActivityが追加されていない可能性があります。 

対処するには、

  1. Eclipseの[PackageExplorer]から、[AndroidManifest.xml]をダブルクリック
  2. [AndroidManifest.xml]の編集画面下の[Application]タブをクリック
  3. [Add]ボタンをクリック
  4. [Create a new element at the top level, in Application.]で、[Activity]など追加したい要素が選択された状態で、[OK]ボタンをクリック
  5. (画面右下1/4の領域に表示される)Name*の右にある[Browse]ボタンをクリック
  6. [Select class name for element Application]下のリストから目的のクラスをクリック

AndroidManifest.xmlファイルを直接編集する場合、

<application></application>の間に

<activity android:name="クラス名"></activity>

を挿入すればOKです。

[Android] SimpleDateFormat

| トラックバック(0) |

日時文字列からDateクラスのインスタンスを得るには、DateUtils.parseDate()を使用する方法以外にも、SimpleDateFormat.parse()を使用しても同様のことができます(こちらの方がお勧めかも)。

また、Dateクラスのインスタンスから任意の日時文字列に変換するには、SimpleDateFormat.format()を使用します。

下記に相互変換したサンプルコードを記載しておきます。

String inDate = "Sat, 10 Jan 2009 00:00:00 +0900";
String outDate = null;
SimpleDateFormat inFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
SimpleDateFormat outFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = null;
try {
    date = inFormat.parse(inDate);
} catch (ParseException e) {
}
outDate = outFormat.format(date); // 結果は、"2009/01/10"

Java言語の配列の書き方は、以下のとおり。

int[] a = {0, 1, 2};
int[] b = new int[] {0, 1, 2};
int[] c = new int[3];
c[0] = 0;
c[1] = 1;
c[2] = 2;

※色々な言語を行き来していると忘れてしまいます。。。現在、C++、AS3、Javaを並行して作業しているので・・・という言い訳。。。

[Android] DateUtils.parseDate

| トラックバック(0) |

日時文字列からDateクラスのインスタンスを得るには、DateUtils.parseDate()を使用します。

ソースコードサンプルは、以下のとおりです。

String dateString = "Sat, 10 Jan 2009 00:00:00 +0900";
String pattern[] = {DateUtils.PATTERN_RFC1123};
Date date = null;
try {
    date = DateUtils.parseDate(dateString, pattern);
} catch (DateParseException e) {
}

DateUtilsには、下記の文字列定数がありますので、 変換元のフォーマットが一致する場合には、定数を指定するだけで利用できますが、そうでない場合にも、HHやmmなどで、独自のフォーマット文字列を書けば利用できます。

  • PATTERN_ASCTIME = "EEE MMM d HH:mm:ss yyyy"
  • PATTERN_RFC1036 = "EEEE, dd-MMM-yy HH:mm:ss zzz"
  • PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz"

※EEEは、曜日。zzzは、タイムゾーン。

Androidでサポートしている画像フォーマットは、以下のとおり。

  • Bitmap(BMP)
  • JPEG(JPG)
  • PNG
  • GIF

静的にリソースに組み込む場合には、res/drawableに画像を配置して、ImageView.srcにセットすれば表示できる。

※Googleさんの公式ドキュメントは、こちら。
 ここでは、PNGが推奨(preferred)で、それ以外は、非推奨(discouraged)と記載されている。

また、URL(http://~)から動的に読み込む場合には、(BufferedInputStream,ByteArrayOutputStream,BufferedOutputStreamなどで)読み込んだbyte配列をBitmapFactory.decodeByteArray()にセットすることでBitmapが得られるので、ImageView.setImageBitmap()にセットすれば表示できる。

※Googleさんの公式ドキュメントでいうと、android.graphicsパッケージ内のBitmap、BitmapFactoryのあたり。

ちなみに駄目元でTIFF(TIF)を試してみたら、やっぱり駄目でした。

※追記:この記事の内容はAndroi1.6までの内容であり、Android 2.0以降では適用できません

詳細は、以下のGoogle codeの書き込みを参照してください

http://code.google.com/p/android/issues/detail?id=5508

→ Android2.2 ではAndroid2.0/2.01/2.1の不具合が解消され、
 -http-proxy http://xxx.xxx.xxx.xxx:8080 などの方法で使用できることを確認しました。 

Androidエミュレータのプロキシ設定について、
Googleさんの公式ドキュメントは、
こちら(http://code.google.com/intl/ja/android/reference/emulator.html#proxy)にあります。

下記のような症状でお困りの方が対象です。

  • ブラウザを起動しても応答がない
  • 「Web page not available」と表示される
  • 「! The page at 'http://... ERROR [object Object」]と表示される

設定方法の要点だけ言えば、
エミュレータ(emulator)起動時に、以下のような引数を追加して起動すれば良いということです。
(以前(m3-rc22a)は、asb shellからsqliteでsettings.dbを書き換えてた方法の別のやり方です。)

  • プロキシ認証が不要な場合
emulator -http-proxy http://<machineName>:<port>
  • プロキシ認証が必要な場合
emulator -http-proxy http://<username>:<password>@<machineName>:<port>

※<machineName><port>などのカッコ<>は不要です
※上手くいかない場合、machiNameのホスト名(ドメイン名)をIPアドレスを直うちしてみてください
※Android 1.0 SDK, Release 1をお使いの方は、Android 1.0 SDK, Release 2に移行してみてください(当方は何故か、これで解決しました。Release 1のエミュレータヘルプで、-http-proxy(ハイフン)でなく-http_proxy(アンダースコア)と表示されるのと関係あるのかな?)

上手くいけば、デフォルトでインストールされているBrowser(ブラウザ)アプリでWebにアクセスできます。

エミュレータを手動で起動している方は、Windowsとかだと、ショートカットを作成し、リンク先へ引数を追加してあげれば次回以降、ショートカットを呼び出すだけです。

Eclipseをお使いの方は、前述の方法で、先にエミュレータを起動しておく。。。でも可能ですが、Eclipseで設定しておく方法をお勧めします。

Eclipseで設定する方法は、
EclipseのWindowメニューからPreferencesを選択し、
Android > Launch の Default emulator options に
上記引数(-http-proxy~)を追加し、Apply > OKを押してください。

※追記:Android2.2では上記方法で使用できることを確認しました

ただし、設定が有効になるのは、これ以降に作成したプロジェクトであるため、
既存のプロジェクトに反映させるには、
EclipseのRunメニューからRun/Debug Configurationsを選択し、
左側のペインで目的のプロジェクトが選択されている状態で、
Targetタブを選択し、
Additional Emulator Command Line Optionsに上記引数(-http-proxy~)を追加してください。
(ここで設定する場合、プロキシ認証が必要な場合でも、認証をつけると上手くいかず、認証の記述を外すと上手くいく場合がありますので、上手くいかない場合には、諦めずにトライしてみてください。)

※2009/7/9追記:それでも上手くいかない場合には、こちらの方法も試してみてください
[Android] Android 1.5 エミュレーターのプロキシー設定 - adakoda

こちらのページからダウンロードできます。
※古いバージョンをお使いの方も、先のページから再度INSTALL NOWアイコンを押すと、バージョンアップできます。

アプリケーション本体は、約1000行ほどの規模ですが、結構色々なことが実現できています。AIRの実力ですね。ちなみにLWWSの処理は、真面目にライブラリ化したので約900行ほどです。

また、今回もLinuxの対応で、結構時間がかかってしまいました。。。
具体的には、コンテキストメニューの応答の違いや、フォント、GlowFilterのかかり具合の微妙な差違です。最終的には、Windowsで実行した場合に最も奇麗に見えるような状態で断念しました。。。

<<前のページへ 2728293031323334353637

Android 楽しいよ!

2010年11月

  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        

自作フリーソフトウェア