2011年3月29日火曜日

eclipseのXMLデザイナーが開かない

eclipse(プレアデス)開発でAndroidのXMLレイアウトについて。

main.xmlをデザイナーモード(Graphical Layout)で開こうとしたらエラーが出た。

「エラーが発生しました。詳細については、エラー・ログを参照してください。」
「com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.(Lcom/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite$IConfigListener;[[Lcom/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite$CustomButton;Lorg/eclipse/swt/widgets/Composite;ILjava/lang/String;)V」

これは、ADT-Pluginのアップデートをすると起こるらしい。
ADT 9.0.0と10.0.0で再現確認。

解決方法:
1、eclipseを終わらせる

2、clearnバッチで起動させる

3、main.xmlをデザイナーモード(Graphical Layout)で開く

4、この段階では表示されないかもしれない。表示されなければ上にあるAndroid対象バージョンを、正しいバージョンに変えてやる。

5、しばらく待つ

6、表示された


参考URL:
http://www.hlplus.jp/php/blog/index.php?UID=1296543897
http://www.hlplus.jp/php/blog/index.php?UID=1298450960



  ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月23日水曜日

XOOPS 構築 ホダ塾ディストリビューション

テスト環境はXAMPP。

インストールは、適当なサイトに書いてあるとおりでいい。

インストの途中で「XOOPS_TRUST_PATH」を設定する画面が出る。

ここに「http://localhost/myPage/xoops_trust_path」と入力してエラーになっていた。

エラー内容は

「Warning: require(/home/balisurf/xoops_trust_path/modules/protector/include/precheck.inc.php) [function.require]: failed to open stream: No such file or directory in /home/balisurf/public/www/mainfile.php on line 105」

「Fatal error: require() [function.require]: Failed opening required 」

ファイルが読み込めないと言っている。

原因は、

1:ファイルがない
2:フォルダがない
3:パスが間違っている


のどれか。


フォルダもファイルもあるので、パスが間違っている。
1時間ほど検索調査&試行錯誤して、凡ミスに気づく。

"URLじゃなくローカルの相対パスか絶対パスを入力する"

「C:¥xampp¥htdocs¥myPage¥xoops_trust_path」

これで、解決した。

しかし、本番サーバーにアップした場合はパスが変わってくるので注意。


   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月17日木曜日

地図表示とGPSで自分の位置を表示する

参考にしたブログで使われていたAndroidバージョンが古いのかVer2.2ではコンパイルエラーが出て使えなかった。
なので、修正した。

環境:Google APIs Ver8(Android 2.2)
          eclipse(ver3.5)
          エミュレータ


以下、修正ソース

public class IamHere extends MapActivity {
    private MapView mapView;

    /** Called when the activity is first created. */
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        // マップを制御するために、マップビューとコントローラを生成する
        mapView = new MapView(this, getResources().getString(R.string.map_key));

        // Activityを有効にする
        mapView.setEnabled(true);
        // クリックできるようにする
        mapView.setClickable(true);
        // ズーム機能を使えるようにする
        mapView.setBuiltInZoomControls(true);

        setContentView(mapView);
        // テストのエミュレータ用(初期化=東京駅に設定)
        Double ido = 0.0;
        Double keido = 0.0;
        ido = 35.681382 * 1E6;
        keido = 139.766084 * 1E6;
        MapController mapController = this.mapView.getController();
        mapController.setCenter(new GeoPoint(ido.intValue(), keido.intValue()));
        mapController.setZoom(7);
    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    // メニューボタンが押下されたときの処理
    // メニューにアイテムを追加する
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      boolean supRetVal = super.onCreateOptionsMenu(menu);
      menu.add(0, 0, 0, "今ここにいます");

      return supRetVal;
    }

    // メニューのアイテムが選択された時の処理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

       Double ido = 0.0;
       Double keido = 0.0;

       switch (item.getItemId()) {
           case 0:
            // 自分の居る位置(緯度、経度)を取得する
            LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
            Location location =
                locationManager.getLastKnownLocation(
                        LocationManager.GPS_PROVIDER
            );

// 実機用
//            ido = location.getLatitude() * 1E6;
//            keido = location.getLongitude() * 1E6;


            // テストのエミュレータ用
            ido = 99.180192510714434 * 1E6;
            keido = 999.876859664917 * 1E6;
      (緯度、経度はでたらめ)

            MapController mapController = this.mapView.getController();
            mapController.animateTo(new GeoPoint(ido.intValue(), keido.intValue()));
            return true;
       }

       return false;
    }
}


1、実行すると地図が出る
2、画面タッチでズームイン、ズームアウトできる
3、メニューから「今ここにいます」を選ぶ(それしか出ない)
4、自分のいる位置が拡大表示される


次回は、自分の位置にマーカーをセットしたい


・参考URL
http://blog.goo.ne.jp/android99_2007/e/eda2ffce3464fa9b3181f0812c3e8e0c
http://android-go.seesaa.net/article/123033515.html


 
   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月15日火曜日

「Google Map(Android Mapと言うらしい)」真っ白な画面しか出ない原因が分かった

まず、デバッグで実行するにしても実機でやるにしても「Google MAPS APIのキー」が必要。
 
   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ



■キーの取得方法(デバッグ編)
1、コマンドプロンプトを使う。インストールしたJavaのbinフォルダにパスを通すか、そこの場所まで移動する。

2、「keytool」と言うexeを使用する。

3、「Documents and Settings\ユーザー名\.android」にdebug.keystoreがあるのでそれをkeytoolの引数に指定する。
例)keytool -list -keystore "C:\Documents and Settings\安藤ロイド\debug.keystore"

以下のようにパスワードを聞かれるが、入れなくていいのでEnter押下。
「キーストアのパスワードを入力してください:」→このままEnter
*****************  警告 警告 警告  *****************
*  キーストアに保存された情報の完全性は検証されて  *
*  いません!  完全性を検証するには、キーストアの   *
*  パスワードを入力する必要があります。            *
*****************  警告 警告 警告  *****************
キーストアのタイプ: JKSキーストアのプロバイダ: SUN
キーストアには 1 エントリが含まれます。
androiddebugkey, 2009/05/24, PrivateKeyEntry,
証明書のフィンガープリント (MD5): 99:CF:99:AB:D9:29:FD:99:02:7B:15:4E:48:99:DD:99
(このフィンガープリントはでたらめ)

フィンガープリントをどっかにコピペしておく。

4、http://code.google.com/intl/ja/android/maps-api-signup.html にアクセス。
  下にチェックし、さっきのフィンガープリントをペーストして「Generate API Key」ボタンを押下。
  以下のような画面が出る。上の方に長いキーがあるのでコピペして保存しておく。


















■コーディング方法
リソースの「main.xml」で画面を構築してついでに、そこへAPIキーを埋め込む方法と、ほとんどJavaコードだけで記述する方法があるが、楽なのでJavaコードだけでコーディングする。

string.xml位は設定する。さっきのAPIキーを登録。
<string name="map_key">XXij5yXhQoQkDVFb6AqlyXXPyLOOivXXapjS4XX</string>
(このキーはでたらめ)

これをせずに実行していた為、マップが出ずに真っ白な画面の下にGoogleMapとだけ出ていた。間違えて画面のタイトルを入れていた。


ぶっちゃけAndroidのマニュアルは見てない。ついカッとなってやった。反省はしていない。

マニュアル?何それ?おいしいの?


ファイル名:
IamHere.java

パッケージ名:
package com.google.android.iamhere;


・以下、ソースコード全文

package com.google.android.iamhere;

import com.google.android.maps.MapView;
import android.os.Bundle;

(普通のActivityではない)
public class IamHere extends MapActivity {
    private MapView mapView;
    /** Called when the activity is first created. */
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // マップを制御するために、マップビューとコントローラを生成する
        mapView = new MapView(this, getResources().getString(R.string.map_key));
        // Activityを有効にする
        mapView.setEnabled(true);
        // クリックできるようにする
        mapView.setClickable(true);
        // ズーム機能を使えるようにする
        mapView.setBuiltInZoomControls(true);
        setContentView(mapView);
    }
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

プロジェクトはいつものAndroidエミュ(Ver2.2)ではなく、GoogleAPI(Ver8)を指定する
あらかじめGoogleAPIの使用したいバージョンをSDK Managerでインストールしておく。
デバッグ構成にGoogle API(v8)を指定して実行。















次回はGPS機能を使用したい。
 
 

2011年3月14日月曜日

Android開発でGoogleAPI(GPS)に関するエラー

importでエラーが出る


import com.google.android.maps.MapActivity;
パスが通ってなく読み込めない模様

GoogleのAPIは専用のアドオンがあるのでそれをインストールしないといけない

手順:
eclipseのメニュー「ウィンドウ」→「Android SDK and AVD Manager」を起動
 ↓
左のメニューリストの「Available Packages」を選択
 ↓
右の一覧から「Google APIs」の好きなバージョンにチェック
 ↓
下のボタンの一番右の「Install Selected」を押す











 ↓
インストールすれば完了

eclipseのプロジェクトの設定とかでビルドターゲットをAndroidではなくGoogle APIにする












   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月9日水曜日

eclipseでPHPをデバッグする

・環境
  pleiades-e3.5-php-jre_20100226.zip(eclipse日本語化とPHPモジュール含む物)
  プレアデスにxamppも入っている


・XAMPPを起動する
  "インストールパス\xampp\setup_xampp.bat"実行。
  XAMPPのセットアップを行います(インストールした初回のみ)


  次回から以下だけやればいい。
  "インストールパス\xampp\xampp-control.exe"実行でXAMPPコンパネ起動。
  XAMPPコントロールパネルからApacheとMySQLを起動します。
  (Startボタンを押す)

 
















   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月7日月曜日

Activityの複数起動禁止

Notificationからアプリを起動するとバックグラウンドにタスクが溜まる
バックボタンを押しても同じ画面が何度も出てきて困る時がある
対処法は以下



(中略)

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            android:theme="@android:style/sample.neko"

            android:launchMode="singleTask"
            ↑この1行を追加

(中略)




強制シングルタスク状態にし複数起動を防ぐ


   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月6日日曜日

simple_list_item_2を使用する方法が分かった

分かりかけたが、実行途中に画面表示前でエラーになる
「Your content must have a ListView whose id attribute is 'android.R.id.list'」

対応は以下
・レイアウト用のmail.xmlを編集する
  <ListView android:id="@+id/android:list"

  となっていたのを
  ↓
  <ListView android:id="@id/android:list"
  "+"を削除した

・javaファイルの修正
  続けて、onCreateの中で
  listView = (ListView)findViewById(R.id.list);
  これをやっているが、idの取り方を変更する
  listView = (ListView)findViewById(android.R.id.list);























・参考URL
http://sham-memo.blogspot.com/2010/08/android.html
http://ochien.seesaa.net/article/158391344.html


   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村



2011年3月2日水曜日

実行前に内部エラーが出る

Eclipseの実行ボタンを押した直後に内部エラーが出てAndroidエミュへ実行ファイルのコピーすらしない

「Path for project must have only one segment.」

このエラーが出ると言うのは、いくつかの原因が考えられて、総合するとプロジェクトファイルの何かが壊れているのでは?と言う結論になるらしい
今回は原因がわかった
対応は以下

・実行の構成
ターゲットクラスが選択されていなかった

テストしたいクラスを選択しないとエラーが出るのは当たり前だった
 

   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

android.R.layout.simple_list_item_2 について

ArrayAdapterでリスト内アイテムの1つの項目に2行表示させようとしたが、実行時にエラーが出て落ちる
解決策は以下

1、SimpleAdapterを使用する
    かなり、こった使い方ができるが面倒でもあるので今回はパス
    やり方は、ネットで検索すると沢山出てくる


2、Stringを無理やり2行に分ける
    こっちの方が楽かなと思った


例)
public class Test_ListViewActivity extends android.app.ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {




(中略)

        // 日付の一覧を元にArrayAdapterを生成する
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, selectDays());
                                    
↑simple_list_item_1のままでいい


        // ArrayAdapterをリストに設定する
        getListView().setAdapter(adapter);
    }

    private ArrayList<String> selectDays() {
        ArrayList<String> ret = new ArrayList<String>();

        // 日付を整形出力するためのフォーマッターを生成
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd (E)");

        // 今日のカレンダーを取得
        Calendar cal = Calendar.getInstance();

        // 月の最大日数分だけ繰り返す
        int maxday = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        for (int i = 0; i < maxday; i++) {
            cal.set(Calendar.DAY_OF_MONTH, i + 1);
            // 整形した日付の文字列をリストに追加する
            String datestr = fmt.format(cal.getTime());
            ret.add(datestr + "\n" + "メモのタイトルでも表示させる?");

                                          ↑改行して表示させるようにする

        }
        return ret;
    }
}
























   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村

2011年3月1日火曜日

アンドロイドのバージョンエラー

以下のエラーが出た

警告: Application does not specify an API level requirement!
Device API version is 8 (Android 2.2)


これは、マニフェストファイルにAndroidの対応バージョンが書いてない事によるらしい
なので、マニフェストファイルに以下を追加

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




(中略)

    <uses-sdk android:minSdkVersion="8" />
</manifest>

Android2.3.3はminSdkVersion="10"だった
Android2.2はminSdkVersion="8"だった


・参考URLhttps://sites.google.com/a/techdoctranslator.com/jp/android/appendix/api-levels


   ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
   にほんブログ村