AndroidStudioちっちゃなプログラムで学習(1)
|
目次
カーネルOSのバージョンを取得表示する処理から学んだこと

色々調べながら、簡単なプログラムを書いてみました。短いソースですが、「初期だからこそ」の大事なことをいくつか勉強出来ました。自分でも忘れないように書いておきます。
(1)まずは作成したソースです
「MainActivity.java」を抜粋します。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String verInfo = null; //OSのバージョン取得用の変数
try {
BufferedReader reader = new BufferedReader(new FileReader("/proc/version/"));
//OS情報を取得
verInfo = reader.readLine(); //情報を読みだして変数へ格納
}catch (FileNotFoundException e){
Log.e("tag",e.toString());
}
catch (IOException e){
Log.e("tag",e.toString());
}
//表示用のテキストビューに出力
TextView text=(TextView)findViewById(R.id.txVwResult);
String strResult="カーネルのバージョンは・・" + '\n' +verInfo + '\n' + "です";
text.setText(strResult);
}
(2)主要のソースはプロジェクトのどこにあるのか
「MainActivity.java」「activity_main.xml」「AndroidManifest.xml」主要3つのソースはどこにあるのか・・ここから始まりました。
| ファイル | プロジェクトフォルダ |
|---|---|
| MainActivity.java | {app}-{src}-{main}-{java} |
| activity_main.xml | {app}-{src}-{main}-{res}-{layout} |
| AndroidManifest.xml | {app}-{src}-{main} |
(3)プログラムはどこから起動されるのか
「AndroidManifest.xml」の一部を抜粋します。
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
この中で
・アクティビティの名前が「MainActivity」であること
・アプリ起動時にこのアクティビティを表示すると
が記述されています。
ゆえに、「MainActivity.java MainActivityクラス」の「onCreateメソッド」がアプリ起動時に自動的に呼び出しされているのです。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
はぁ~ここまで長かった!スポンサードリンク
(4)import文の記述
例えば「FileReader」を使用したい場合。「FileReader」に関するソースは「 java.io.FileReader 」に記載されているため、これを使用すべく宣言が必要になります。
この宣言が「 import java.io.FileReader; 」となるのですが、これを記載しないと「FileReader」部分のソースが赤字表示されています。
手入力だと面倒なので支援機能を使って追加します。

赤字表示されている「FileReader」付近にカーソルを持っていくと、上図のようにお伺いしてくれます。
ここで[Alt]+[Enter]キーを押すと、import文を自動追加してくれます。赤字も解除されます。
気遣いがうれしい機能です。
(5)エラー処理の記述
エラー処理を書かずに
BufferedReader reader = new BufferedReader(new FileReader("/proc/version/"));
//OS情報を取得
verInfo = reader.readLine(); //情報を読みだして変数へ格納
だけのソースを記述すると、この部分が赤破線表示になっていました。エラー処理を追加し、
try {
BufferedReader reader = new BufferedReader(new FileReader("/proc/version/"));
//OS情報を取得
verInfo = reader.readLine(); //情報を読みだして変数へ格納
}catch (FileNotFoundException e){
Log.e("tag",e.toString());
}
catch (IOException e){
Log.e("tag",e.toString());
}
とすると、赤破線表示が解除されました。バッファーへの読み出しを行う際にエラーが発生することも想定する必要があるのですね。(6)Javaソースから画面上パーツへのアクセス方法
読みだしたOSの情報を画面上のテキストビュー(IDは「txVwResult」)に表示する際のソースです。
//表示用のテキストビューに出力
TextView text=(TextView)findViewById(R.id.txVwResult);
String strResult="カーネルのバージョンは・・" + '\n' +verInfo + '\n' + "です";
text.setText(strResult);
TextView text=(TextView)findViewById(R.id.txVwResult);
この部分で画面上に配置されたテキストビュー「txVwResult」をTextView型の変数「text」に格納しています。
「findViewById」メソッドは指定したIDを持つ画面上のパーツを返してくれるのですが、この戻り値は「View型」であるため、「TextView型」としてアクセスしたい場合は戻り値を「キャスト」しなければなりません。
「型キャスト」についての記事はこちら
「R.id.txVwResult」にある「R.javaのidクラス」ですが、プロジェクトをビルドするとJavaが自動生成するリソースのようです。

詳しくわからないので自分の覚書き程度で申し訳ないですが・・
「app\build\generated\source\r\debug\androidsupportv7appcompat」
に「R.java」がありました。ここに「idクラス」もありますね。
スポンサードリンク
コメントを書き込む