Get a network qualification

資格を取得することでネットワークエンジニアへの道が開けます。
ネットワークエンジニアの資格取得に役立つテキスト・勉強法を自身の体験を交えて紹介します。
是非、資格を手に入れてネットワークエンジニアになろう。

資格を手に入れてネットワークエンジニアになろう

スポンサーリンク


31
2017  23:59:08

元ネットワークエンジニアのAndroidアプリ開発奮闘記(ぇ

Androidアプリ開発奮闘記android-program-image01.jpg

約半年に及んだプログラム学習もいよいよ大詰めとなり、最後の集大成としてこれまで学んだ事を活用したAndroidアプリを開発する事になりましたが、学んだ事を殆ど理解出来ておらず、作業が一向に進まない有様です(ガーソorz)。

何とか中間課題を仕上げて動きはしたものの・・・現実は厳しい><


一応、先日の記事でも述べた通り、これまでも中間課題のようなものは幾つかこなしてきましたが、基礎の基礎レベルのコードを書き上げるのがやっとで、辛うじて動くプログラムを提出する事は叶いました(ぇ。



といっても、Intentによる画面遷移を組み合わせた画像集みたいな簡単なものですけどねorz。
一応、画面を切り替えて次の画像を表示したり、「戻る」機能を付与したり、プログラムを終了する事は出来ますが、それ以外はこれと言って何の特徴もない残念なプログラムです(ガーソorz)。

しかも、ソレすら、わたし一人では書き上げることが出来ず、先生や受講生に聞きながらやっと仕上げたものだったりします><。

ほんと、今のわたしのレベルでは、動くプログラムが書けた事が既に奇跡だと言えます(ちょwww)。
もっとも、自分一人ではまともに動くプログラムを書けないので、実質全然成長してないんだけどね(だめぽorz)。

マジ、こんな有様なのに、Androidアプリ開発に取り組むことになるとか、一体俺にどうしろと(シルカwwwww)。

そんなわけで、開発レベルのコードを書くには程遠く、わたし一人では相変わらずまともなコードを書く事が出来ずに今尚苦しむ毎日です><。

プログラム学習集大成のAndroidアプリ開発に取り組むも・・・


申し訳ないとは思いながらもコードの書ける受講生に教えて頂きながら、現在アプリ製作を進めています><。
むしろ、このままではコードの完成を見ることなく、カリキュラムが終了してしまいそうです(ガーソorz)。

さすがに、ソレは避けたいので、どのようなアプリを作りたいのか構想を固め、ある程度盛り込む挙動や機能を限定した上で、出来る限り現時点のスキルで何とかなりそうなものを作ろうしていますが、現実は甘くなく、思うようには動いてくれません><。

改めて、Androidによるアプリ開発の難しさを痛感している次第です><。

やはりJavaベースのプログラムという事で、オブジェクト指向の概念をしっかり理解出来ていないと動くプログラムが書けない事を実感するに至りました><。

ほんと、このオブジェクト指向プログラムというヤシは、ちょっとした動作や操作をしようとするだけで、何行にも渡ってコードを書いたり、前後の関係を抑えながら、コードを書き分けたりしないといけないので、いちいちマンドクセー(ヲィwwwww)。

オブジェクト指向は何でこんなに厄介なのだろうか・・・


何と言ってもプログラムのコードを追うのに、あっち行ったりこっち行ったり、目まぐるしくあちこち見て回らないといけないのが辛すぎるorz。

しかも、使用しているメソッドが既に古くなって新しいものに置き換わっていたり、インポート文が追加で必要になったりと、とにかく複雑な構造になっているんだよね(ガーソorz)。

ちなみにメソッド(Method)とは「振る舞い」の事を指しています。
つまり、何らかの動作を伴うコードになります。
簡単に言えば、何らかの行動を伴うコードを書く際は、メソッドが必要になるというわけねw。

マジ、何でこんなわかりにくい構造にしたのか、本気で理解に苦しむんだよね><。

こんな複雑な構造よく理解出来ると思うよ・・・ほんとorz。
改めてプログラムの構造を理解出来ている人は凄いよwwwww。

もっとも、理解していないと自分でプログラムなんて書けませんけどね^^;。
マジ、プログラム出来る人尊敬だわwwwww。

Androidアプリはコードをコピペしても動かない事が殆どですorz


なまじ動くプログラムをコピペしたとしても、自分仕様に改変しないといけないケースが多いので、基本的な事は理解出来ていないと、恐らく手も足も出ないと思われ(ガーソorz)。

事実、わたしは、参考になりそうなサイトのソースを目にしてはソレを拝借(笑)しようとするものの、そのまま丸写し(笑)では動かず、何か手を加えようものならたちまちコードが無茶苦茶になる有様ですからね(だめぽorz)。

ってか、勝手に人のソース丸写ししている時点でダメすぐるwwwww。

でも、他者のソース見た所で、意味理解出来てないから殆ど意味ないんだけどね(アフォwwwww)。

マジ、今の俺は誰かに頼らないと、まともに動くアプリが開発出来ないと思われ(ガーソorz)。

コレでも、自分なりにテキスト読んだり、実際に打ち込んだりして学習したつもりではいるんだけど、実際にプログラムを書くとなるとほんと難しい><。

我ながらまだまだ修行が足りぬわ(シネヨwwwww)。

ってか、後何年修行すればいいんだ(一生ヤッテロwwwww)。

・・・つくづく俺ってエンジニア向きジャナイヨネ(ナニヲ今更wwwww)。

これならまだ、色々と制約の少ないJavaScriptjQueryの方が幾分かマシかも><。
変数宣言の際もint等のデータ型の記述不要だし、メソッドチェーンと言って、数珠繋ぎのように色々なメソッドを一度に実行出来たりするからね(ニヤw)。

当然の事ながら、JavaやAndroidのコードでそんな記述するとたちまちエラーの嵐でヲワタ(ガーソwwwww)。

もっとも、これらはスクリプト言語で比較的易しいコードではあるものの、プログラムの苦手なわたしにとっては、コレでも充分ハードル高いんだけどね><。

でも、ソレでも、難解すぐるJava言語に比べればまだ何とかなるレベルかも(ぉ。
オブジェクト指向マジ意味ワカラン(ちょwwwww)。

つまり、Androidの親玉であるJava言語が難しすぎるんダヨ><。

あまりにもAndroidプログラムのコードが理解出来ないので、正直もう全てを投げ出して楽になりたい(笑)心境なのは内緒(だめぽwwwww)。

むしろ、我ながらこんな苦痛の日々をよく約半年間も耐えられたものダ(ぇ。
結局殆ど何もモノにならなかったけどねorz。

ソレでも、文字列の出力や、文字列連結、変数の使用や、配列、それに簡単な条件分岐くらいまでなら何とか使えるようにはなったからねw。

もっとも、こんなの基礎の基礎で現場の人間からしたらお話にならないレベルですけどね(ガーソorz)。

デモ、一応、最終製作に取り掛かっている身としては、少しでも学んだ事を活かしたアプリを開発したいというのが本音だったりします><。

Androidアプリの最終課題として「クイズゲーム」を現在作成中w


そのため、現在わたしが取り組んでいるのが、アプリ開発の中でも比較的難度が低いと言われる「クイズゲーム」で、画面遷移を基本とした、次々と出題される問題に答えていくというものです(ぇ。

ソレでも相当難しくて、幾人もの人の手助けを借りながら何とか形になってきているといった状態です><。
わたし一人では到底このゲームを作ることは叶わないでしょう><。
自身の貴重な時間を割いてまでわたしに協力してくださっている方々に心より感謝申し上げます><。

現在、わたしはゲーム作りを進める上で実装したいと考えているある機能が実装出来ず、苦慮していたりします><。
その機能については後述したいと存じます(えーw)。

ともあれ、わたしが現在進めている「クイズゲーム」の構成は以下の通りとなっています(ぇ。
まあ、よくあるクイズ形式を踏襲してはいますが、このプログラム構造を理解するだけでも一苦労ってか、よくわかっていないのが本音だったりします(だめぽwwwww)。

先に述べた通り、画面遷移を頻繁に行いますが、画面遷移を行う際には、なるべくActivityクラスを作らず、必要最小限のクラスでコレを実現するようにしています。

具体的には、自分自身に遷移を繰り返すことであたかも他のページに遷移したかのように見せかけ、同じページ内の情報を只管書き換えるという事を行っています(ぇ。

その方法としては、配列を用いてクイズの問題及び選択肢の文言を書き換えるという手法を取る方向で、うまく機能するように現在作成しています^^;。

後になって、その方法ではCPUに大きな負荷を掛けることがわかったのですが、直すと手戻りが大きいので、そのまま続行する事になったとかならなかったとか(ぇ。

おかげで、プログラムが強制終了し捲くる羽目に(ガーソorz)。

更にカウントダウンタイマーを仕込む事で、制限時間以内に問題に答えられないと誤答と見なして次の問題が出題される仕組みになっています^^;。

尚、選択肢の正誤判定にはif文を用い、その正誤に関わらず次の問題に遷移するようにしていますw。
つまり、一度解いた問題には戻れないようにしているわけです^^;。

そのため、「戻る」ボタンの挙動も無効になるようにコードを書いています^^;。

ちなみに上記に加え、1問毎に正解数をカウントするように繰り返し条件を仕込み、最終的な獲得点数及び正解数を表示する仕様にしようと考えています。

これらは繰り返し条件をうまく使い、取得した値を変数に格納する事によっていつでも使用出来るようにしています(ぉ。
正直、繰り返しの所は苦手なので、うまく機能するかどうか最後まで気が抜けない今日この頃だったりします^^;。

それらに加えて、問題に正解した際の効果音誤答の際の効果音を仕込んでいます。

「クイズゲーム」の制作に取り組むも問題山積で道は険しいorz


しかし、現在、どうしても解決出来ない問題があり、その処理に苦慮していたりします^^;。

ソレは、問題文の出題の際に効果音を鳴らすというものですが、書いている位置が悪いのか、それともわたしの文法に問題があるのか一向に鳴らず途方に暮れています><。

どうやら、「SoundPool」というメソッドを用いるようなのですが、色々と記述が変わっているようでうまく書けていないようです^^;。

package com.sample.soundtest;

import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class TestSound1 extends AppCompatActivity {

// ① 効果音を鳴らす準備をする
SoundPool soundPool; // 効果音を鳴らすための変数を定義
int se1; // 効果音1(wave)
int se2; // 効果音2(wave)


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.Sample_Sound);

// ② 初期化を行う、決まり文句なので深く考えずに書く
//ロリポップより以前のバージョンに対応するコード
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
} else {
//音を出すための設定①(決まり文句)
AudioAttributes attr = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
//音を出すための設定②(①の設定を使用してsoundPoolを設定している、決まり文句)
soundPool = new SoundPool.Builder()
.setAudioAttributes(attr)
//同時に鳴らすことが出来る最大数4
.setMaxStreams(4)
.build();
}

// ③ 音を鳴らすために予め音声ファイルをロードする
se1 = soundPool.load(this, R.raw.collect1, 1);
se2 = soundPool.load(this, R.raw.incollect1, 1);
}


public void onB1(View v){
// ④ 再生処理を行う(ボタンを押すと正解音が鳴る)
soundPool.play(se1,1f , 1f, 0, 0, 1f);
   //soundPool.play(対象ファイル,左のボリューム,右のボリューム,音を鳴らす優先順位,ループ回数,再生速度)
}

public void onB2(View v){
// ④ 再生処理を行う (ボタンを押すと不正解音が鳴る)
soundPool.play(se2,1f , 1f, 0, 0, 1f);
}
}
何やら記述内容が以前と比べてかなり増えているので、とてもじゃないけど、こんなの覚えられないし、正しく書けているかどうかも微妙です^^;。

尚、画面のレイアウトや問題文及び選択肢の表示時の正誤判定等については記載を省いていますので悪しからず(えーw)。

あくまで、一番基礎となる書き方のみ示していますので、取りあえず音鳴らしたいヤシは、効果音ファイルを準備して、上記の通り記載すればあわよくば動くカモネ(ニヤw)。

但し、上記の記載はAndroidStudioでの動作なので、他の環境下では動かない可能あるかもナー(ガーソorz)。

AndroidStudio

ほんと、プログラムコードってマジ何言ってるのかイミフだよね(だめぽwwwww)。
マジ、このコードの解説を求められても俺レベルじゃ到底㍉wwwww。

正直、自分でも何を書いているのかよくわかっていません(ヲィw)が、先に紹介した「SoundPool()」はぢつはもう廃止メソッドとして使用を推奨されていないようです^^;。

現時点(2017年3月31日)では「SoundPool.Builder()」というメソッドを使う事が求められているようです^^;。

上記の表記はAndroidOSの旧バージョンである「LOLLIPOP(ロリポップ)」以前のバージョンに対応した書き方と、それ以降のバージョンに対応した書き方となっています(ぇ。

このように書く事で、一応バージョン間で互換性を持った記載ができるわけです^^;。

それで、問題文の出題音をこの「onCreate()」の中で鳴らそうとすると、タイミングが早すぎるのか、まったく鳴らずにいきなり問題文が表示されてしまうわけです(ガーソorz)。

ほんと、AndroidのActivityのライフサイクルはよくわからん^^;。

一応、それ以外の「onStart()」でも試してみたりしましたが、一向に状況が改善されない模様です><。
まさかとは思うけど、更に一段階進んだ「onResume()」に書くと動くのかも試練(ぇ。

ってか、情報を保持した時点で音が鳴るようにすれば、うまくタイミングが合わせられそうな希ガスw。
つまり、「onPause()」で一旦停止させて情報を保持し、「onResume()」で再開させれば、うまく情報を渡せるかも試練(ニヤw)。

何だか我ながらいいアイデアかもw。
早速試してみるかw。
ちゃっかり自己解決してしまいそうなヤカン(ダマレクズwwwww)。

やっぱり、クイズの場合って問題文の出題時に効果音あったほうがイイヨネ^^;。
明らかに臨場感が出るからね^^;。

更に言うと、バックミュージックも鳴らしたい所だけど、果たしてどこまで実装出来るのやら^^;。
こういうのって追求し出すとキリがなくなるから、程よい所で妥協する必要がありますからね^^;。

コレだけ色々詰め込めば習った事をある程度取り入れたアプリが出来ると思われ(ニヤw)。
出来ればアニメーション効果とかも入れたい所だけど、俺のスキルではかなり厳しいと思われ(ガーソorz)。

そんなわけで、Androidアプリの最終課題作成に向けて現在鋭意奮闘中です><。
残された時間で少しでも多くの事を吸収したいと思っています><。

自身に才能がないのは重々承知の上で、ソレでも少しでも成長出来れば幸いです><。
少なくとも半年前よりは出来ることが増えているはずだからね(ぇ。

いあ、殆ど自信ないけど(ちょwww)。

皆さんも、もし宜しければプログラムに挑戦されてみては如何でしょうか。
こればかりはやってみなければわかりませんし、もしかすると、とてつもない才能があったりするカモヨ(ダマレカスwwwww)。

わたしはコレッぽっちもなかったけどね(だめぽwwwww)。

Androidアプリ開発ならこちらがおすすめ♪

↓ ↓ ↓

Androidアプリ開発ならこちら

スポンサーリンク


 プログラム学習

0 Comments

Leave a comment