2011年6月29日水曜日

Google CGI API for Japanese Input

/*
これは、
Google CGI API for Japanese Input(日本語変換をインターネット上で実現するための、CGI サービス)
をandroid上で学習・実験するプログラムです。
参考となるサイトは次のとおりです。
http://code.google.com/intl/ja/appengine/docs/java/urlfetch/usingjavanet.html

以下のsourceは、開発者がAPIを学習・実験するためのプログラムであり、デバッグを行いながら、内容を様々に書き換えて、各変数の内容を確認することを前提としている。
ユーザーインターフェイスは無い。 最終利用者が使うものでは無い。
学習・実験目的であるため、簡潔には書いていない。
Eclipseでandroidプロジェクトを新規生成した時に作成されるjavaファイルの内容を下記のとおり書き変えれば良い。

事前に、AndroidManifest.xmlファイルに次の一行を追記する必要がある。
<uses-permission android:name="android.permission.INTERNET" />
*/
package jp.Test.HTTPGet;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONException;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class HTTPGet extends Activity {
    private final String sLogMes = "HTTPGet";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        URL url = null;
        String sLines = "";
        String s = "http://www.google.com/transliterate?langpair=ja-Hira|ja&text=";

        //変換したい文字列を書き込む。UTF-8 でエンコードする。
        s = s + Uri.encode("へんかん");
        //s = s + Uri.encode("ここではきものをぬぐ");

      try {//URL型に整形する。
            url = new URL(s);
      }
      catch(MalformedURLException e){
      Log.e(sLogMes, "URL Exception");
      finish();
      return;
      }

try{//GETを発行し、データを受け取る。
           InputStream is;

           //GETを発行し、変換後のデータを受け取る。JSON 形式の配列が返されます。
is = url.openStream();

//後続のJSON処理のため、受け取ったデータをString型に変換する。
            byte[] Buffer = new byte[1000];
is.read(Buffer, 0, 1000);
sLines = new String(Buffer);
}
        catch(IOException e){
      Log.e(sLogMes, "IO Exception");
      finish();
      return;
        }

        try{//JSON型で扱う。
        int i, iArrays;
            JSONArray aJSONMain, aJ1, aJ2;
       
        aJSONMain = new JSONArray(sLines);//JSON型に変換する。
       
            iArrays = aJSONMain.length();
            for(i=0; i<iArrays; i++){
                int i2, iA2;

                //デバッガーで値を確認することが目的なので、何もしない。
                aJ1 = aJSONMain.getJSONArray(i);
                s = aJ1.getString(0);//第一要素 元の文字列
                aJ2 = aJ1.getJSONArray(1);
                iA2 = aJ2.length();
            for(i2=0; i2<iA2; i2++){
                  s = aJ2.getString(i2);//第二要素 変換候補
            }
            }
        }
        catch(JSONException e){
      Log.e(sLogMes, "JSON Exception");
      finish();
      return;
        }

        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
    }
}

後日談を、Google API Japanese Inputに書いておきました。

2011年6月23日木曜日

The declared package "jp.Hello" does not match the expected package ""

The declared package "jp.Hello" does not match the expected package ""

Eclipseを使っていて、良くある、誤った操作として、
不用意に、ファイルを別のディレクトリに移動させてしまう
という現象がある。

Eclipse画面の左側に「Package Explorer」欄(又は「Navigator」欄)があるが、そこのファイルを操作すると、意図しないのに、ファイルを別のディレクトリに移動させてしまう。操作者は意図していないため、ファイルが移動したことに気が付かない。そのため、上記のような、エラーが発生する。

「Package Explorer」欄では、(default package)ディレクトリがあり、そこにjavaファイルが存在する。

このjavaファイルを元のディレクトリに移動してやれば問題は解決する。

意味不明なエラーメッセージが出たら、ファイル構成を確認することも必要である。

この問題の解決に結構時間がかかってしまった。残念です。

「Navigator」欄と「Package Explorer」欄の違いが不明である、という疑問を念を抱きながら、本日のレクチャーを終わりたい。

2011年6月1日水曜日

Internal error logged from JDI Debug

Internal error logged from JDI Debug

【再現方法】
デバッグモードでアプリケーションを起動する。
「Waiting For Debugger」というメッセージwindowが出たら、そのwindowの中にある「Force Close」を押す。
なお、このWindowは放っておけば自然に消滅する。

【解決方法】
上記windowが表示されても、「Force Close」ボタンを押さずに、そのwindowが自然消滅するまで、そのまま待つ。

【開発環境】
OS:Windows Vista
Eclipse IDE for Java Developers Helios Service Release 2