職業訓練校での半年間

2013/10月中旬から半年間の記録を書き留める予定。
http://android.wktk.so/ があるのを知って開始しました。

カテゴリ: JAVA

更新とめたままにしてましたが、3/5(水)で学校を退校しました。
なので、この先は気が向いたら来週java(Servlet)のこと書くくらいになります。
ご愛読、ありがとうございました<(_ _)>
#ブログのタイトルと趣旨が変わってくるので移転します。
#移転先は決まったらココで連絡します。

最終日ですが・・・
学校のあとK氏と飲み→定期返金&購入→帰宅(22時頃)
→K氏と時折チャットで進捗連絡しつつ課題作成(26時)

だったのでまー初日グロッキーでしたよねとw
ま、環境構築と顔合わせ位だったから何とかなりましたが(゜_゜>)

で、Servletのソース見て思ったけど、
Servletすっ飛ばしてSAStrutsを構築してたもんだから
DB接続とかジェネリックスメソッドとかVector型とか、、、
覚えなきゃいえない内容がちょいちょいあるなぁーっと(-_-;)

oracle接続(MySQLもPosgreも書き方は少し違うけど手順は同じ)
#後者の方がソースの説明はやさしい
#Oracleのサービスとめてた場合は、開始させとく
#+「メニュー」->「Oracle Database 11g Express Edition」->「データベースの起動」を実行。
http://www.whitemark.co.jp/tec/java/javaExamples8.html
http://www.techscore.com/tech/Java/JavaEE/JDBC/oracle-1/

※ojdbc6(Oracleドライバ)のデフォ設置場所
 (eclipse側は[外部jarの追加]で取り込んでください)
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

※ユーザ作成+権限付与(試しにtuser/tpassで作成)
http://oracle.na7.info/4_2_role.html

※SIDの調べかた(OracleXEだったのでxeだった)
http://www.sql-dbtips.com/sqlplus/oracle_sid/

私はOracleXEだったので、下記の形で接続できました!
----------------------------------------------------
conn = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","tuser","tpass");
----------------------------------------------------

ジェネリックス
#「T,?,V,E」のパラメータが少なくともある
「E」:(Element:要素)
#「T」:(Type:型)
#「?」:ワイルドカード
#「V」:Map<k、v>のV・・・Value要素
http://okwave.jp/qa/q6043858.html
http://www.javainthebox.net/laboratory/J2SE1.5/LangSpec/Generics/Generics.html
http://www.techscore.com/tech/Java/JavaSE/JavaLanguage/1-2/
http://oshiete.goo.ne.jp/qa/6194409.html

Vector型
http://msugai.fc2web.com/java/collection/Vector.html


ちょっとサイト見てたら頭に入れてなかったなーっと。
もういい年だから教える立場になるからJavaに関するのは詰めておかないと。。
(見つけたのはPHPだけどw)
 
で、クロージャですが下記が凄い分かりやすかったです!
http://dqn.sakusakutto.jp/2009/01/javascript.html


あとデザインパターンとJavaの入門以降も何点か。
今日何も勉強してないけど
http://www.techscore.com/tech/DesignPattern/index.html/
http://www.techscore.com/tech/Java/index/




とりあえずネタ画像からはじめよw




【AsyncTask】
非同期で1秒毎に途中経過をToastで表示し、
完了(10秒)後、「処理が終了しました」と表示して終了するプログラム作りました。
WS000025 

WS000026


あ、Toastを使っているので、
AsyncTaskを継承したクラスを内部クラスで使ってます。

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    MyAsyncTask myAsyncTask = new MyAsyncTask();
    //MyAsynkTaskに装備されてるexecuteメソッドを実行する
    myAsyncTask.execute(1);
  }


  class MyAsyncTask extends AsyncTask {
    /********************************************
     * 1.[onPreExecute()]がまず実行される。
     *   ここにはTextViewなどのIDセットとか書く
     ********************************************/
    @Override
    protected void onPreExecute() {
      super.onPreExecute();
    }
  
    
    /**********************************************************
     * 2.[doInBackground(params...)
     *   バックグラウンド(MainActivityとは別に)で実行したい処理を記述する 
     *   #[publishProgress(xxx)]で[onProgressUpdate(xxx)]が実行される
     **********************************************************/
    @Override
    protected Boolean doInBackground(Integer... params) {
      for(int i= params[0]; i<10000; i++){
        if(i % 1000 == 0){
          publishProgress(i);
        }
        Log.d("TAG", "i="+i);
      }
      return true;
    }
  
    /**********************************************************
     * 3.[onProgressUpdate(values...)
     *   バックグラウンド処理(2)の進捗状況を
     *   メインスレッド(MainActivity)に表示する処理を記述する。
     *   #このプログラムでは1秒単位で呼び出される
     **********************************************************/
      @Override
      protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
      Log.d("TAG", "onPostExecute:" + values[0]);
      Toast.makeText(MainActivity.this, "途中経過"+ values[0], Toast.LENGTH_SHORT).show();
      }
      
    /**********************************************************
     * 4.[onPostExecute(result...)
     *   バックグランド処理が終了した後、メインスレッドに反映させる処理を記述する
     **********************************************************/
      @Override
    protected void onPostExecute(Boolean result) {
      super.onPostExecute(result);
      Log.d("TAG", "onPostExecute:" + result);
      Toast.makeText(MainActivity.this, "処理が終了しました", Toast.LENGTH_SHORT).show();
    }
      
  }  
}


























内部クラスぇ・・・
http://www.atmarkit.co.jp/ait/articles/1007/27/news103.html 

Androidのスレッド前に・・・

スレッドの方法は3つあったりしました。
#1~○を1秒毎に表示する例

★基本的な書き方
public class Thread1 {
	public static void main(String[] args) {
		
		for(int i=1; i<10 ; i++){
			System.out.println(i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

★内部クラス(匿名クラス)を用いた場合
public class Thread2 {
	public static int i;
	public static int x;
	public static void main(String[] args) {
		
		Thread thread = new Thread(new Runnable() {
			@Override
			public void run() {
				while(x<=i){
					System.out.println(x);
					x++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		});
		
		//開始・終了を別途指定する
		x=1;
		i=10;
		thread.start();
	}
}

★別クラスをスレッド化(引数を使えるメリットあり)
public class Thread3_hikisu extends Thread{
	int i;
	public Thread3_hikisu(int i) {
		this.i = i;
	}
	public void run(){
		for(int x=1; x<=i; x++){
			System.out.println(x);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			}
		}		
	}
}
/*****************************
 * //で囲った部分でもOK
 *****************************/
public class Thread3 {
	public static void main(String args[]){
//		Thread3_hikisu t_class = new Thread3_hikisu(5);
//		Thread thread = new Thread(t_class);
//		thread.start();
		
		new Thread3_hikisu(5).start();
	}
}

 

電車座ってこれるのはいいことです(*^_^*)
仕事は1/6(月)まで休みな人多いってのに早々にお勉強っす。


【メニューバー】
フリーのアイコンはここから取得
http://commons.wikimedia.org/wiki/Crystal_Clear 

メニューリストはでたけど、アイコンがでないorz
(menu.xml , MainActivity.javaを変更)
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		
		//メニュー表示
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);

		return true;
	}


場所がメニューリストじゃないけど、一応でた、、、
http://blogs.yahoo.co.jp/simasaki2001/33188970.html
http://furudate.hatenablog.com/entry/2013/06/01/062205
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO 自動生成されたメソッド・スタブ
		return super.onOptionsItemSelected(item);
	}

下記に情報追加されてくれないかなぁ・・・チラッチラッ
http://www.atmarkit.co.jp/ait/articles/1304/11/news020_3.html

あと、画像名は小文字のが無難。
エラー出た\(^o^)/
[2014-01-04 11:19:38 - Ts3] res\drawable\Anime4.jpg: 無効なファイル名: must contain only [a-z0-9_.]


【アニメーション】
1. res/anim フォルダを作る
2. 新規->Android xml ファイル
3. [Tween Animetion]を選択し、完了。

あとは下記を作れば、絵が白くなったり戻ったりするアニメーションが出来る。

    
public class MainActivity extends Activity {

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

		ImageView img=(ImageView)findViewById(R.id.imageView1);
		Animation anim=AnimationUtils.loadAnimation(this, R.anim.anim);
		img.startAnimation(anim);
	}
}


【アニメーション2】
今度は画像を変えていく。
GIF画像みたいな感じっすねー。


★anime.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:drawable="@drawable/anime1" android:duration="500"/>
	<item android:drawable="@drawable/anime2" android:duration="500"/>
	<item android:drawable="@drawable/anime3" android:duration="500"/>
	<item android:drawable="@drawable/anime4" android:duration="500"/>
</animation-list>

<!-- 
android:duration ・・・ 指定した数値より大きい画像の場合、表示されないので注意!
 -->

★activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
         />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Button" />

</RelativeLayout>

★MainActivity.java
public class MainActivity extends Activity {

	AnimationDrawable ad;
	Button bt;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//情報を取得
		ImageView iv = (ImageView)findViewById(R.id.imageView1);
		bt=(Button)findViewById(R.id.button1);
		
		//R.drawable.drawableはdrawable.xmのIDの意
		ad=(AnimationDrawable)getResources().getDrawable(R.drawable.drawable);
		//アニメーション、1回で終えるね!
		ad.setOneShot(true);

		//ImageViewにアニメーション化したものをセット!
		iv.setImageDrawable(ad);

		//ボタンをクリックされたら・・・
		bt.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//アニメーションを開始!
				ad.start();
			}
		});
	}
}



午後もアニメーションの続きでした。
色々いじったので、ソースは端折ります。。
 

★背景グラデーション
★アニメーション
  (上はぐるぐる回転、下は何もないところから登場)
  →PowerPointで良く見るアニメーションですね
WS000016






















このページのトップヘ