その他の機能
ちょっとした情報の表示やデバッグ用の表示など、ビューを定義することなく簡便に使える表示機能について解説します。
■ちょっと表示
Androidの用語で Toast(トースト) と呼ばれる機能です。
(日本語で「トーストする」‥では日本語として変なのでMindでは「ちょっと表示」としてあります)
注:副スレッド内では本処理単語は実行できません(アプリケーションごと落ちます)。
サブアクティビティ内あるいはサービス内での利用は可能です。
文法
<文字列>を ちょっと表示 → ・
<文字列>を ちょっと長く表示 → ・
記述例
「サービスを起動しました」を ちょっと表示し
エラーメッセージを ちょっと長く表示し
プログラム例
※ファイル名 Misc/SpToast.src
ボタンクリック処理とは 本定義 (ID → 戻値)
(IDを) 捨て
「ちょっと表示のテストです&LF&」続
「(複数行の表示もできます)」を ちょっと表示し
0を 返す。
メインとは (・ → ・)
_ボタン1は 変数
ボタンビューを生成し _ボタン1に 入れ
20を _ボタン1に 文字のサイズを設定し
「ちょっと表示のテスト」を
_ボタン1に 文字を設定し
_ボタン1を ビューをアクティビティに追加し
_ボタン1に クリックリスナーを登録する。

「ちょっと表示」「ちょっと長く表示」は、指定した文字列をビューやレイアウトを使うことなく画面に表示します。
前者は2秒間、後者は4秒間表示し、自動的に消えます。
文字列の中に改行を入れることで複数行を表示できます。ソースコード埋め込みの文字列であれば 「メッセージ1&改行&メッセージ2」のようにしてください。
本処理単語を実行すると直ちにリターンして次の処理に移り、表示が終ることを待つことはないので注意してください。つまり、2秒とか4秒の表示がされているとき、プログラムは既に先に進んでいることから、表示内容と実態が合わなくなることもあります。本処理単語を連続して呼び出した場合にはそれが顕著になります。
アプリのデバック目的で、途中経過を(「ここまで来た」というような)表示させたり、あるいは変数の内容を表示させたいことがあります。
ごく簡単な方法としては「ちょっと表示」、「ちょっと長く表示」を使う方法もありますが、使用頻度が多い場合は見づらくなります。また「ちょっと表示」はスレッド内やサービス内では使えないという制限もあります。
本格的にデバックしたいケースでは本機能を使います。
■通常使用するもの
Mindのログを使うには、まず「メイン」の中で、「Mindのログをリセット」または「Mindのログを準備」を実行しておきます。
通常は前者を使います。アプリの起動時に古いログはリセットされます。
もし前回のアプリ実行の様子を後になっても見たいのであれば後者を使います。しかし後者ではリセットされることがないので、ずっと使い続けてログが肥大してしまわないよう注意してください。(必要なタイミングで「Mindのログをリセット」を呼び出してください)
現在のバージョンではログバッファの容量は2KBです。
記入したログ内容を確認したい場合には「Mindのログをダイアログに表示」を使います。この単語を呼び出すタイミングが必要になりますが、通常は主画面のどこかに「ログを見る」というような名称のボタンを置き、それを押したら起動すると良いでしょう。
文法1
(ログを利用できるようにする)
Mindのログをリセット → ・
↑↓いずれか一方を使う
Mindのログを準備 → ・
(書き込み)
<文字列>を Mindのログに書き込み → ・
↑何回も繰り返せる
(内容の確認)
Mindのログをダイアログに表示 → ・
文法2
(ログ書き込み時に使うと便利な単語)
<文字列>と <数値>を メッセージと数値を合成 → 文字列
<文字列1>と <文字列2>を 二つのメッセージを合成 → 文字列
<文字列1>と <文字列2>と <文字列3>を 三つのメッセージを合成 → 文字列
記述例
ボタンクリック処理は 本定義 (ボタンID → 戻値)
_番号は 変数
IDから番号を得て _番号に 入れ
〜略〜
_番号が ・・に 等しい
ならば Mindのログをダイアログに表示する
〜略〜
。
○○処理とは (・ → ・)
〜略〜
「賛成/反対: 」と _値で メッセージと数値を合成し Mindのログに書き込み
〜略〜
「名前: 」と _値列で 二つのメッセージを合成し Mindのログに書き込み
〜略〜
「感想: 」と _値列で 二つのメッセージを合成し Mindのログに書き込み
。
メインとは
〜略〜
Mindのログをリセットし
〜略〜
。
プログラム例
※ファイル名 Misc/SpWriteLog.src
ボタンクリック処理は 本定義 (ボタン情報 → 戻値)
_ボタンは 変数
_番号は 変数
_戻値は 変数
※
_ログに書き込みとは (・ → 戻値)
「ログ記入のテキスト」を Mindのログに書き込み
「記入しました」を ちょっと表示し
0を 返すこと
※
_ログを表示とは (・ → 戻値)
Mindのログをダイアログに表示
0を 返すこと
※
_ログの削除とは (・ → 戻値)
Mindのログを削除し
「削除しました」を ちょっと表示し
0を 返すこと
※
_ログのリセットとは (・ → 戻値)
Mindのログをリセットし
「リセットしました」を ちょっと表示し
0を 返すこと
※
_終り処理とは (・ → 戻値)
実行終り定数を 返すこと
※
本体とは
_ボタンに 入れ
_ボタンの IDから番号を得て _番号に 入れ
_番号で
選択する
_ログに書き込み
_ログを表示
_ログの削除
_ログのリセット
実行終り定数
選択終り
_戻値に 入れ
「ボタン分岐のあと」で このメッセージでスタック検査し
_戻値を 返すこと
。
メインとは
_レイアウトは 変数
_ボタンラベルは 文字列定数配列
「ログに書き込み」
「ログを表示」
「ログの削除」
「ログのリセット」
「終了」
_ボタン数は 数値 _ボタンラベルの 要素数
_ボタンは _ボタン数の 変数
Mindのログをリセットし
(レイアウト)
リニアレイアウトを生成し _レイアウトに 入れ
垂直を _レイアウトに 子の追加方向を設定し
_レイアウトを レイアウトをアクティビティに追加し
(ボタン群)
_ボタン数を
回数指定し
ボタンビューを生成し _ボタン(回数)に 入れ
20を _ボタン(回数)に 文字のサイズを設定し
_ボタンラベル(回数)を
_ボタン(回数)に 文字を設定し
_ボタン(回数)を _レイアウトに ビューを追加し
_ボタン(回数)を クリックリスナーを登録し
繰り返し。
メイン画面 |
「ログを表示」ボタンを押したとき |

|

|
SpWriteLog を起動すると上記左側の画面が表示されます。
ここでたとえば「ログに書き込み」のボタンを2度ほど押し、その後で「ログを表示」ボタンを押すと上記右側のようにログ内容が表示されます。
前記とは別に、プリファレンスアクティビティ でのサンプルアプリでも、プリファレンス(簡易データベース)の内容を表示させるのにログ記入とログ表示を使っていました。プログラムの実行中に簡便に値を表示させるのに使えます。

■まれに使うもの
文法
Mindのログを読み出し → 全行文字列
↑一度に全部を読み出し。途中改行が含まれます。
Mindのログファイル有り?とは (・ → 真偽)
Mindのログを削除とは (・ → ・)
ログ内容の確認には通常は「Mindのログをダイアログに表示」を使い、ダイアログとして表示させますが、それ以外の出力方法をとりたい場合に「Mindのログを読み出し」を使えばログ内容を文字列として得ることができます。全行分を返すので途中改行(LFコード)が含まれます。
「Mindのログを削除」は「Mindのログをリセット」よりも強い機能で、ログファイル自体を抹消します。
開発するアプリが Android の特定の資源をアクセスする場合、「この資源を使う」ことを明示的に示す必要があるものがあります。それはソースプログラムの中から指定するのではなく、開発画面で オプション の指定により行います。
オプションの指定の実際については既に、マニュアルの 「マナーモードとバイブレーション」 − 「バイブレーションのサンプルプログラム」 にて触れていますが改めてここで解説します。
オプションの指定は下の図にある [Option] ボタンで行います。

[Option] ボタンを押すと次のダイアログが開きます。

上記のチェックボックス群のうち、必要な項目をオンにして「確定」ボタンを押します。メイン画面は次のように変化します。

上記のように「Option」ボタンの枠線が赤色に変化し、何らかのオプションがオンになったことが分かります。
必要なオプションをオンにし忘れた場合でも、コンパイルは正常に行われるので気が付きにくいことに注意してください。その代わり実行時にエラーになります。そのエラーの起こり方は資源によりまちまちです。
前記した例のバイブレーション機能のオプションの指定忘れでは、バイブレーションを行う処理単語を実行した段階で Android OS によってアプリが落とされます。

ほかには、ネットワークのオプションの指定忘れでは、ネットワークをアクセスする処理単語を実行した場合にその処理単語がエラーリターンします。(このケースではアプリが落ちることはありません)
■私のパッケージ名、私のクラス名 など
文法
私のパッケージ名 → 文字列
私のパッケージ名・短縮 → 文字列
私のクラス名 → 文字列
私のクラス名・短縮 → 文字列
記述例
※ファイル名 Misc/SpMyName.src
私のパッケージ名等を表示とは (ビューID → ・)
_ガイドは ID
※
_追加とは (文字列 → ・)
_ガイドに 文字を追加すること
※
_一行追加とは (文字列 → ・)
_ガイドに 文字を追加し
「&改行&」を _ガイドに 文字を追加し
※
本体とは
_ガイドに 入れ
「私のパッケージ名:」を _一行追加し
「 」を _追加し 私のパッケージ名を _一行追加し
「私のパッケージ名・短縮:」を _一行追加し
「 」を _追加し 私のパッケージ名・短縮を _一行追加し
「私のクラス名:」を _一行追加し
「 」を _追加し 私のクラス名を _一行追加し
「のクラス名・短縮:」を _一行追加し
「 」を _追加し 私のクラス名・短縮を _一行追加し。
メインとは (・ → ・)
_ガイドは ID
テキストビューを生成し _ガイドに 入れ
12を _ガイドに 文字のサイズを設定し
黒色を _ガイドに 文字の色を設定し
緑色を _ガイドに 背景色を設定し
「」を _ガイドに 文字を設定し
拡張と 非拡張を _ガイドに ビューのサイズを設定し
_ガイドを ビューをアクティビティに追加し
_ガイドへ 私のパッケージ名等を表示すること。

標準のMindに「私のプログラム名」「私のプログラム名・短縮」がありましたが、それと類似のAndroid版です。
ちなみに、フルパスのもの(「・短縮」が付かないほう)は以下の通りです。
<-----パッケージ名-----> ↓クラス名・短縮
com.yamada.taro.MyName.MyName
<-----クラス名(フルサイズ)------>
アクティビティが1つだけの場合、パッケージ名の末尾と、クラス名末尾(=クラス名・短縮)が同じになります。
さらにサブアクティビティもある場合は、クラス名の末尾が2通り(メインアクティビティ名およびサブアクティビティ名)に変化します。
<-----パッケージ名-----> ↓クラス名・短縮
com.yamada.taro.MyName.MyName ←メインアクティビティ
com.yamada.taro.MyName.SubName ←サブアクティビティ
<-----クラス名(フルサイズ)------->
■暗黙のスタック検査
すべてのイベント処理と「メイン」の最後の部分で強制的なスタック検査が行われます。
処理単語「メイン」の最後ではスタックが空であるのが正常で、空でない場合は強制的にエラー処理が行われます。
それ以外のイベント処理単語 (たとえば「ボタンクリック処理」) の最後ではスタックに1つだけ戻値が詰まれていることが正常であり、それからズレがある場合はエラー検出となります。
詳しくは スタックエラー で解説しているのでそちらを参照してください。
■プログラムによる意図的なスタック検査
「このメッセージでスタック検査」 が標準Mindと同様に使えます。
この単語を呼び出したときにスタックが空でない場合、 暗黙のスタック検査時と同様のエラー表示 がおこなわれます。
たとえば 「メインの終り」の情報と共にスタックエラーが表示されたような場合、メイン処理のどこかでスタックずれを起こしていることまでは分かりますが、メインの記述が大きなときは、どの箇所でスタックずれを起こしているかがすぐには分からないこともあります。
そのような場合は、メイン定義内のどこかに、
「・・・」で このメッセージでスタック検査
という行を挿入して再コンパイルし、それを走らせます。
エラーにひっかからなければメインの先頭からその箇所までは正常です(問題は後半部)。もしエラーになれば、メインの先頭からその箇所までのどこかに誤りがあることになります。こうやってスタック検査をより細かく行うことで原因を特定します。この試行錯誤を短時間でおこなうには、ソースブロックの半分の箇所、そのまた半分の箇所・・と追い込んでいく方法が良いでしょう。
注意するのは、スタックが空であるべき箇所に挿入することです。
文法
<メッセージ>で このメッセージでスタック検査 → ・
記述例
「ここかな?」で このメッセージでスタック検査し
ポップアップ(またはトースト) |
通知領域への表示 |

|

|
上記はエラーにひっかかった場合の表示です。
左側は短時間での表示なので、少し経過してからの確認は右側の通知領域を見てください。
Copyright(C) 2000 Scripts Lab. Inc.