fc2ブログ
 
■プロフィール

クリエイトウェーブ

Author:クリエイトウェーブ
開発における、諸々を書いていきたいなと思っています。
mail : info@createwave.jp

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ

■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
アンドロイドJAVAで通信
おつかれさまです。 フッチーです

アンドロイドで通信しないといけないんですが、頼んでたソースもらって、参考にみながら構築してたんですが・・・
いざ実験してみると、うまくいかない・・・・・・

数時間格闘の後に、エラー起こしてる場所までは、つきとめたんですが・・・・解決方みつからず。

あきらめて月曜にくるS君か、H君にきくことにしてましたが、今連絡とれて判明しました。

AndroidManifest.xml

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

いれないと、通信そのものが許可されないらしい・・・
まあ、こういうオチだろうと思ってはいたけれど、やっぱこういうオチだった。

数時間無駄にしました・・・・ガック。

テーマ:android - ジャンル:コンピュータ

カテゴリー:JAVA | TM(0) | CM(0)
アンドロイドJAVA Eclipsでトレース
おつかれさまです。
フッチーです。

忙しすぎて中々アンドロイドJAVAに触れないので困ったものなのですが、Eclips触りながら、アンドロイドJAVAにもActionScript3とか、C#みたいなトレース出力はないのかと模索。

判ったのでメモです。

まず、下準備。 LogCatウィンドウが必要です。出てなければ
Eclipsの「ウィンドウ」メニューの「ビューの表示」から「その他」を選びます。
アンドロイドトレース1

出て来た「ビューの表示」ウィンドウからLogCatを選択
アンドロイドトレース2

次にアンドロイドJAVA

import android.util.Log;

が必要です。

そうするとLogというメソッドが使えるようになります。
これが、いわばトレースです。

メソッドが5種類あり

Log.d -- デバッグログ
Log.e -- エラーログ
Log.i -- 情報ログ
Log.v -- 詳細ログ
Log.w -- 警告ログ

があるようです。どれでも使っていいのか、イマイチ判りませんが、デバッグログ を使ってみます。

Log.d("trace", "test**************************************");
第一引数の "trace" はタグ(判別子)です。 好きな名前でいいと思いますが、ActionScriptで慣れたtraceって名前にしました。

第二引数のところが出力したい値。

これでめでたくLogCatウィンドウに表示されるようになります。
アンドロイドトレース3

しかし、これだと、自分が書いた任意のトレース以外も全部拾ってしまいます。 結果みにくい。

そこでLogCatウィンドウ右側にある「+マーク」フィルターの作成をポチっとおします。
アンドロイドトレース4

現れた「Log Filter」ウィンドウを設定。
フィルター名は、わかりやすいので「trace」
さっき第一引数でつけたタグ名「trace」だけをみたいので、「by Log Tag」に「trace」を設定。

log.d でデバッグログを使ってるので 「by Log level」は「Debug」に・・・
アンドロイドトレース5

これでめでたくtraceだけが見れるようになりました。
アンドロイドトレース6

テーマ:android - ジャンル:コンピュータ

カテゴリー:JAVA | TM(0) | CM(0)
バージョンアップの有無を確認する[iアプリ DoJa-5.1]
Pです。


iアプリからバージョンアップを実行するには
IApplication.lauch(LAUNCH_VERSIONUP, null);
を使用します。

起動直後に実行するものとします。

メソッドを実行すると、「バージョンアップしますか? はい/いいえ」といったダイアログが出て、ユーザーに選択を促します。はいを選択するとiアプリは一端終了し、バージョンアップが完了されると自動で再起動するようになっています。

ただこれだと、アプリが最新かどうかに関わらず起動時に毎回ダイアログが出てしまうためよろしくありません。よって、このメソッドを使用する前にローカルアプリのバージョンが最新かどうかを調べる必要があります。


恐らく色々な方法があるのではないかと思いますが、私は以下の方法で対応しました。

[Versionup.java]
import java.io.InputStream;
import javax.microedition.io.Connector;
import com.nttdocomo.io.HttpConnection;
import com.nttdocomo.ui.Canvas;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Graphics;
import com.nttdocomo.ui.IApplication;

public class Versionup extends IApplication
{
 public void start()
 {
  Display.setCurrent(new MyCanvas(this));
 }
}

class MyCanvas extends Canvas
{
 private Versionup main;
 public MyCanvas(Versionup main)
 {
  this.main = main;
  String result = MyConnect.start();
  System.out.println(result);
  if (result.indexOf(main.getArgs()[0]) >= 0)
  {
   //バージョンアップの必要なし
  }
  else
  {
   //バージョンアップの必要あり
   main.launch(IApplication.LAUNCH_VERSIONUP, null);
  }
 }

 public void paint(Graphics g)
 {
  g.lock();
  g.drawString(main.getArgs()[0], 20, 20);
  g.unlock(true);
 }
 
}

class MyConnect
{
 public static String start()
 {
  return connect();
 }
 
 private static String connect()
 {
  String result = "";
  HttpConnection conn = null;
  InputStream in = null;
  
  try
  {
   //JAMを直接読み込む
   String url = IApplication.getCurrentApp().getSourceURL() + "Versionup.jam";
   conn = (HttpConnection)Connector.open(url, Connector.READ, true);
   conn.setRequestMethod(HttpConnection.GET);
   conn.connect();
   in = conn.openInputStream();
   
   byte[] data = new byte[(int)conn.getLength()];
   in.read(data);
   result = new String(data);
  }
  catch (Exception e) {}
  finally
  {
   try
   {
    in.close();
    conn.close();
   }
   catch (Exception e) {}
  }
  
  return result;
 }
}

ADF設定のUseNetworkのhttpにチェックを入れておきます。

1.ADF設定のAppParamにバージョンを表す任意の値を記述(例:ver1.0.0)
2.http接続でサーバー上のjamファイルを読み込む
→jamファイルをテキストエディタで開いた時のようなStringを取得できる
3.2で取得したStringにAppParamに記述した値が含まれるかどうかString.indexOf()で調べる
→AppParamに記述した内容はIApplication.getArgs()で配列として取得できます。今回はAppParamにひとつしか値を記述していないのでgetArgs()[0]となります。

あまりスマートではないですが、これで完成です。
アプリを更新したい時は、AppParamに前回と違う文字列を記述してビルド後、サーバーにアップします。
注意点としてAppParamには、他のADF設定で使用していないユニークな文字列を設定することでしょうか。

ローカルアプリのLastModifiedあたりが取得できればもうちょい楽なんですけど……

カテゴリー:JAVA | TM(0) | CM(0)
ある日付から○○日後の日付を取得[iアプリ DoJa-5.1]
Pです。

JAVAのAPIを見るとCalendar.add()という、まさにそのものズバリな
メソッドがあるのですが、DoJa環境では使用出来ないようです。

仕方ないのでCalendar.getTime()でミリ秒計算して対応していたわけですが
最近もっと簡単な方法を見つけたのでメモ。

Calendar getLapsedDays(int year, int month, int date, int days)
{
 Calendar c = Calendar.getInstance();
 c.set(Calendar.YEAR, year);
 c.set(Calendar.MONTH, month);
 c.set(Calendar.DATE, date + days);
 return c;
}

Calendar c = getLapsedDays(2009,0,1,5);
System.out.println(
 c.get(Calendar.YEAR) + "/" +
 (c.get(Calendar.MONTH) + 1) + "/" +
 c.get(Calendar.DATE));


daysに10を入れると10日後→2009/1/11
-5を入れると5日前→2008/12/27
といった具合に取得できます。
年や月をまたいだり、閏年などの特殊ケースも問題なく動作します。

Calendar.set()にこんな使い方があるとは思いませんでした。


カテゴリー:JAVA | TM(0) | CM(0)
Eclipseでiアプリ開発
インストール終わったので、実際制作してみます。

ファイルメニューから新規を選択。プロジェクトを選択。
Javaの中にある「Doja-5.1 プロジェクト」を選択します。


まずは、お決まりのHelloWord
プロジェクト名を「HelloWord」と付けて終了ボタンをおすと開発画面に移ります。


パッケージエクスプローラーにHelloWordのパッケージが出来上がっています。


プログラムファイルは、srcフォルダの中につくっていきます。
画像とかの素材ファイルは、resフォルダの中に入れます。今回つかいませんが。

srcフォルダを選択した後に右クリック。現れるメニューから「新規」「クラス」を選択。


現れるメニューで、いまからつくるクラスファイルの名前をつけてあげます。
クラス名を「HelloWord」にするので、名前のところに「HelloWord」を入力して終了をクリック.


拡張子javaのプログラムファイルが出来上がります。


基本形は決まっているようです

import com.nttdocomo.ui.*;

public class HelloWord extends IApplication
{
  public void start()
  {
    MyCanvas m = new MyCanvas();
    Display.setCurrent(m);
  }
}

先程のプログラムを上のように書き換えます。
Dojaの場合、メインクラスは、IApplicationを継承しないといけないみたいです。

起動メソッドは、startになるようです。
IApplicationの実行手順がそうなっていて、オーバーライドしてるって事なのかな。

MyCanvasは任意のクラス名、これから作るクラスの名前です。

先程と同じ手順で
srcフォルダを選択した後に右クリック。現れるメニューから「新規」「クラス」を選択。
今度は「MyCanvas」と付けてあげます。

import com.nttdocomo.ui.*;

public class MyCanvas extends Canvas
{
  public void paint(Graphics g)
  {
    g.drawString("Hello World!", 20, 20);
  }
}

こちらは、Canvasを継承してあげます。

これでプログラムは出来上がりました。
後は実行してみます。

実行の前にいくつか設定しなければいけません。

パッケージエクスプローラーの「HelloWord」を選択して、プロジェクトメニューの「Doja-5.1」を選択、その中の「ADF/トラステッド動作設定」を選びます。


ここでAppName(アプリの名前)とAppClass(メインクラス)を登録します。
今回は、両方とも「HelloWord」と入力します。


ADF/トラステッド動作設定が終ったら、今度は「実行」メニューの「構成およびデバッグ」を選択。


ここで実行するプロジェクトを登録します。
プロジェクトが複数になってきたら、ここで登録されてるプロジェクトがデバっグで起動するので切り替えないといけないので注意。

設定が終ったらデバッグを実行。
実行結果は、ごらんの通り。


JAVAもやってみて思うのは、ActionScript3やC#とそっくりというか、考え方が同じというか・・
まあ、AS3もC#もJAVAがベースになってるので当たり前か。

テーマ:プログラミング - ジャンル:コンピュータ

カテゴリー:JAVA | TM(0) | CM(0)
次のページ