Latest Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

Servlet・JSP 関連

Servlet・JSP

基礎から学ぶサーブレット/JSP 第1回

「Java初心者のためのWebシステム入門」

Tomcatを使う「JSPプログラミング」

やり直し「JSPとTomcat」

快速MySQLでデータベースアプリ!

syntaxhighlighter

前から、気にはなっていたが、メモすら物ぐさ太郎状態だったので、
放置していた。

参考サイトを見つけたので、今日こそはとメモ。


ソースコードを綺麗に表示するJS「dp.SyntaxHighlighter」

Android エミュレータで 音を鳴らす

開発したアプリをエミュレーターやデバッガ上でテストする


p.jpg

Eclipse内蔵コンパイラとSunのJDK

Eclipse内蔵コンパイラとSunのJDKの違い

eclipseコンパイラ調査報告書

SurfaceHolder.Callback

SurfaceHolder.Callback | Android Developers

SurfaceViewで高速描画する(1)

Androidでゲーム作成(1) - やさしいデスマーチ

SurfaceViewならAndroidで高速描画ゲームが作れる

SurfaceViewによる高速描画 (1/5)

URLEncoder & URLDecoder

swingの練習に、やってみた。。。

googleで、ほげほげを検索した時の %○×・・・ の部分を、ただ、見てるだけ。
qqq.jpg

JAVA関連 リンク

デバッグのヒント教えます

Javaプログラミング編

Jsp/サーブレット編

Java開発者のためのFAQ集

tomcat

hoge.png← 一応、問題が多いが出来たので、次行くことに。menuとかも出せるようにはしてる。



そのためのリンク
いまさら聞けないTomcat〜JSPサーバ構築のキソ
やり直し「JSPとTomcat

scrollView in tab

@タブごとに別々の Activity を割り当てた時

スクロールバーは当然、親で、子には必要なし。

TextViewの背景色を変える

XMLで色を変える方法。
※もちろん、JAVAで変える方法も併記されています。

リンク先


そのほかにも、res - color - colors.xmlで、

string.xml と同じ方法で、設定できそうだ。調べてないけど。。。メンドウくさい。。。




なぜならば、甘カワイイの Eclipseは、

Propertiesで backgroundに、#色だけでOKになっているから。。。。www

【16進表示】
不透明度、赤色、緑色、青色
※0を指定した時が透明

(ex)
Background #66ff0000





Javaも、ヘボイ自分には、Eclipseの GUI 経由での
Xml 変更が とても、ありがたい。




@TextView
xml プロパティ一覧

R.java 自動更新されない

XMLファイルに、エラーが存在するとR.javaファイルは自動的には更新されない。。。

eclipseにプロジェクトを読み込めない(普通のプロジェクトファイルでも)

バージョンが古い Android プロジェクトファイルを扱う場合、
Eclipse?が、エラーを出します。


なので、Eclipseに、やってもらう方法と思えるのが、


1.workspaceに、プロジェクトファイルをコピペ
2.プロジェクトを、新しく同名で但し、既存から作る。



(例)
File - New - Project - Android Project

ソースと同じプロジェクト名をProject Nameに指定
Create project from existing sourceを選択
Location: 該当のフォルダ。

※もちろんSDKは、該当のものを選ぶ


eclipseにプロジェクトインポートしようとしてエラー/Django

Android Tab Layout

Tab関連...


Android Tab Layout

タブを用いた画面を作成する / Getting Started

〜抜粋〜
@タブ UI を実現するには、TabHost と TabWidget を使う必要がある
 ・TabHost はレイアウトの root node でなければならない
 ・TabHost は、タブを表示するための TabWidget とタブの内容をする Framelayout を含む

@タブコンテンツの実装方法には2つある
1. 同じ Activity で、タブごとに View を切り替える
2. タブごとに別々の Activity を割り当てる





色々なレイアウトも。。。但し、知識不足で現状は、理解できず。
(※但し、説明が凄く簡潔で分かりやすいです。)

Android のタブを使いこなす


〜抜粋〜
タブ画面の大枠は TabHost という要素
id には android:id/tabhost を指定 ⇒ この中に各種要素を配置。


まず、タブとそれに対応する内容のレイアウトを定義する。

タブは TabWidget という要素で定義
id は @android:id/tabs

タブの内容は FrameLayout 要素で定義
id に @android:id/tabcontent

Android Asset Studio

こんなのがあるなんて、今日知りました。
アイコンが、サクっと作れます。


Android Asset Studio

Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

【症状1】
Project has no project.properties file! Edit the project properties to set one.
Unable to resolve target 'android-9'


【対応】
「project properties」ファイルの target= のverを8へ
# android 2.2環境なので。。。




【症状2】
Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.


【対応】
Eclipse に既存の Android プロジェクトをインポートする際、はまるポイント3

〜抜粋〜
プロジェクト右クリック → プロパティー → Java コンパイラー
プロジェクト固有の設定を可能にするにチェックを入れて、コンパイラ準拠レベルを変更

Androidアプリ開発者なら押さえておきたい Javaセキュアコーディングの意味と効果

リンクMemo

Androidアプリ開発者なら押さえておきたい Javaセキュアコーディングの意味と効果


Java セキュアコーディングスタンダード

jUnit4 に関するmemo

今まで、何だろうと思いつつも放置していた jUnit。。。

全く良さを、味わえない orz


JUnitの利用


JUnit−2.基本操作


jUnit 4.x 系の使い方




assertEquals(arg1, arg2)  arg1とarg2が同じ値かどうか判別します。違う場合はFailure(失敗)になります。基本型、オブジェクト型の両方を判別できます。
assertEquals(msg, arg1, arg2)  上記と同様に振舞います。値が違う場合はメッセージとしてmsgを表示します。  
assertTrue(boolean)  引数がtrueかどうか判別します。falseの場合はFailure(失敗)になります。  
assertTrue(String, boolean)  上記と同様に振舞います。falseの場合はメッセージとしてStringの値を表示します。 
assertFalse(boolean)  引数がfalseかどうか判別します。trueの場合はFailure(失敗)になります。  
assertFalse(String, boolean)  上記と同様に振舞います。trueの場合はメッセージとしてStringの値を表示します。  
assertNotNull(Object)  引数がNullでないか判別します。Nullだった場合はFailure(失敗)になります。  
assertNotNull(String, Object)  上記と同様に振舞います。Nullだった場合はメッセージとしてStringの値を表示します。  
assertNull(Object)  引数がNullかどうか判別します。Nullでなかった場合はFailure(失敗)になります。  
assertNull(String, Object)  上記と同様に振舞います。Nullでなかった場合はメッセージとしてStringの値を表示します。  
assertSame(Object1, Object2)  Object1とObject2が同じオブジェクトを参照しているかどうか判別します。同じオブジェクトでなかった場合はFailure(失敗)になります。  
assertSame(String, Object1, Object2)  上記と同様に振舞います。同じオブジェクトでなかった場合はメッセージとしてStringの値を表示します。  
assertNotSame(Object1, Object2)  Object1とObject2が同じオブジェクトを参照していないかどうか判別します。同じオブジェクトだった場合はFailure(失敗)になります。  
assertNotSame(String, Object1, Object2)  上記と同様に振舞います。同じオブジェクトだった場合はメッセージとしてStringの値を表示します。  
fail( )  強制的にFailure(失敗)になります。  
fail(String)  上記と同様に振舞います。Failure(失敗)の際、メッセージとしてStringの値を表示します。  





HTTP Server 'Bad Gateway' : http (省略)HttpClient connection error response code 502.

【症状】
AndroidのEclipse用ADTプラグインをインストールする際に
「指定のURL」のリポジトリーが見つからない。

【対策】
https://dl-ssl.google.com/android/eclipse/ が見つからない


(抜粋)
最終手段は、zipで落としてきてから「サイトの追加」でローカルファイルを選択すればOK。


ADT Plugin for Eclipse

いまさらながらの、恥ずかしいQ&A 4 Java

Q. JRE と JDK はどう違うのですか?

JRE(Java Runtime Environment)
JDK をベースに作られた Java のプログラムを実行する際に必要になる JVMと
クラスライブラリのパッケージ

JDK(Java Development Kit)
開発者向けのコンパイラなどのツールとクラスライブラリのパッケージ


Java 2以降では、JDKをSDK(Software Development Kit)と呼ぶようになりました。
SDKにはJREが含まれているので、SDKを導入した開発者は別途JREを入手して導入する
必要はありません。

また、JRE は自分の作成したアプリケーションと共に再配布することが可能です。


Q. J2SE、J2ME、J2EE とは?
Java言語を用いたシステムで使用できるAPIセットなどを用途別に規定した規格の種類です。

J2ME 携帯機器などの組み込み向け  
J2SE クライアントアプリケーション向け  
J2EEサーバサイド向け  


J2ME(Java 2 Platform, Micro Edition)は、J2ME Core API をベースに、
ネットワーク常時接続向けのCDC(Connected Device Configuration)や、
携帯電話のような携帯型ネットワーク情報機器向けCLDC(Connected, Limited Device Configuration)で
構成され、パソコンに比べ、少ないメモリ、低速なCPU、小さな画面、といった
限られたリソース上で動くことが要求されます。
CDC には Personal Profile、CLDC には、携帯電話向けのMIDP(Mobile Information Device Profile)
などがあります。
(参考)
 http://java.sun.com/j2me/


J2SE(Java 2 Platform, Standard Edition)は、Java Core API と Java RMI、CORBA API、
Java Accessibility API、Swing などで構成され、パソコンなどのデスクトップ環境向けです。
(参考)
 http://java.sun.com/j2se/


J2EE(Java 2 Enterprise Edition)は J2SE をベースに、Java Servlet、
JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)などで構成され、
企業の基幹システムなど、いわゆるエンタープライズシステム環境向けです。
(参考)
 http://java.sun.com/j2ee/


(参照元)

jar と mf

【jarファイルの仕様】
JAR ファイルの仕様

【Jarファイルに関するmemo】
リンク


【eclipse含め】
〜 転載 〜
eclipseでlib以下に入っているもの。
外部jarをエクスポートしたつもりでも
「java.lang.NoClassDefFoundError:」のままである

が、しか〜し!
MANIFEST.MFに
外部jarの情報(パス)を書き込み、指定の場所にその外部jarを置く。


MANIFEST.MFの書き方は下記のとおり
(※実際は全て半角のみで区切ってある長い1行)
(※Class-Pathに指定したパスは、エクスポートしたjarからの相対パスです)

MANIFEST.MF----------------
Manifest-Version: 1.0
Main-Class: Login
Class-Path: ./ ./xxxxxx.jar ./xxxxx.jar ./junit.jar ./xxxx-2.5.1-final-20040804.jar ./xxxxx-contrib-2.5.1-final-20040804.jar ./xxx-xxx-x.5.1-final-20040804.jar ./swt.jar ./xxx-connector-java-3.0.17-ga-bin.jar
Created-By: Ant 1.3


たとえば、eclipse上で(外部jarを利用して)動いていたjavaプログラムをエクスポートしたものを
sample.jarとしよう。

で、sample_dirというディレクトリに入れ込む。
MANIFEST.MFは↑↑↑上記で書き込んだとおり。


sample_dir
┣sample.jar
┣xxx-1.0.0.jar
┣xxxxx-1.0.1.jar
(以下省略)


これで、javaのパスが通っていれば、sample.jarをダブルクリックで動く....

ソースで通らない時のための memo1

〜転載〜

Java1.4プログラムをJava1.5に移行する

SOBAフレームワークは、産官学体制のSOBA ProjectではJava1.4で開発されていました。
Java自身のバージョンアップにともない、SOBA Project, IncではSOBAフレームワークのJava1.5対応を行いました。Javaのバージョンアップについて、SOBAで注意しないといけないところは主に3点ありました。

1. ThreadのgetState()メソッド
ThreadにgetState()というメソッドが追加されました。いままで、getState()という名前のメソッドを使っていた箇所は、オーバーライドとして扱われる可能性があるので要注意です。

2. Enumerationのenum
enumが予約語になりました。Enumeration enumなどと定義した箇所はコンパイルが通りません。困ったことに昔の本のサンプルには必ずEnumeration enumと書いてあるので、Java1.4でEnumerationを使っていたほとんどのコードではenumと定義されています。

3. deprecatedになったshow/hide
show/hideはdeprecatedになりました。deprecatedは「推奨されない」との意味で、コンパイル時に警告が出るだけですが、少し気持ち悪いです。これらのメソッドはsetVisible(true/false)に置き換えるとよいのですが、show/hideをオーバーライドして使用している箇所があるときには、変更には最深の注意を払わないといけません。

1.ゲームプログラミングのしくみ memo

←今度は、
これです。
 


〜抜粋 Memo〜
@イベントと イベントハンドラ
イベント駆動によって処理が実行されるしくみを備えているシステムでは、

マウスポインタがウインドウ上に入ってきたり、位置を変えたりする移動や

どのウインドウのどのボタンが押されたか、どのキーが押されたかなどの操作を

イベントとして扱う。



またイベントごとにイベントハンドラと呼ばれる処理を記述しておき、

イベントが発生すると、特定の処理が行われる。


JAVAでは、GUIをもったクラスのオブジェクトがイベントによる処理を行えるように、

GUIをもったクラスに専用のメソッドが用意されており、イベントハンドラの役割を果たす。


このメソッドをオーバーライドして、行わせたい処理を記述。


こうしたメソッドには、発生したイベントの内容を表すクラスのオブジェクトが引数として

与えられるようになっているので、発生したイベントに応じて処理を変えることができる。


※アンドロイド プログラミングでいうところの 『onCreate』 という認識。
 

はじめてのプログラミング (Java)

CUIプログラミングの練習に、作ってみた。
しかし、完成度は、60%も満たないが止めた。 www

# 打ち込みが面倒なので。。。 orz
# 気が向いたなら続きを作るかも。。。
# (肝心の?占い結果を書いてある shikicard.java を作ってない)

←元ネタはコレ
24枚のカードから8枚を、
あるルール選択、配置し、
カードの内容と関係を見ながら判断


// main.java

package localhost.localhost;

/**
* 陰陽師 「式神」占い
* 〜 恋愛 〜
*
*/


public class main {

public static void main(String[] args) {
int cnt; // シャッフル回数
int cho; // 指定カードの何番目

// シャッフル回数を 指定 実行
System.out.println("カードをシャッフルする回数を指定してください(0以上):"
+"(ex. 3[Enter])");
cnt = readNumber();

placeShiki start = new placeShiki();

start.shuffle(cnt);
System.out.println("シャッフル "+cnt+"回:[完了]");



// 指定カードの何番目
System.out.println("カードを1枚選んでください。(1-24)番目を指定:(ex. 3[Enter])");
cho = readNumber();
start.cRoutine(cho);
System.out.println("触機 "+cho+"選択終了");
System.out.println(start.finlist);



/*
* 占い判定
*/

gThink self = new gThink();


// 自身(触機 − 1課) get(0)−get(1)
self.gThin(start.finlist.get(0), start.finlist.get(1));
System.out.println("自身(触機 − 1課)\n" + self.hantei);

// 相手(触機 − 3課)
self.gThin(start.finlist.get(0), start.finlist.get(3));
System.out.println("相手(触機 − 3課)\n" + self.hantei);

// 基本的相性(1課 − 3課)
self.gThin(start.finlist.get(1), start.finlist.get(3));
System.out.println("基本的相性(1課 − 3課)\n" + self.hantei);

// 3関(1課−2課、1課−3課、2課−3課)
self.gThin(start.finlist.get(1), start.finlist.get(2));
System.out.println("3関(1課−2課)\n" + self.hantei);
self.gThin(start.finlist.get(1), start.finlist.get(3));
System.out.println("3関(1課−3課)\n" + self.hantei);
self.gThin(start.finlist.get(2), start.finlist.get(3));
System.out.println("3関(2課−3課)\n" + self.hantei);

// 未来(触機−末伝)
self.gThin(start.finlist.get(0), start.finlist.get(7));
System.out.println("未来(触機−末伝)\n" + self.hantei);

}




// キーボードから数字を入力するメソッド
public static int readNumber(){
byte b[] = new byte[100];

try{
System.in.read(b);
return Integer.parseInt((new String(b)).trim());
}catch(Exception e){
return 0;
}
}

}



********************************************************************************
// placeShiki.java

package localhost.localhost;

import java.util.Collections;
import java.util.ArrayList;


public class placeShiki {
// フィールド
ArrayList list; // テンポラリー 24枚 [ ][ ][ ][ ] ・ ・ ・[ ][ ][ ]
ArrayList finlist; // [0.触機][1.一課][2.二課][3.三課][4.四課][5.初伝][6.中伝][7.末伝]

// メソッド
public placeShiki(){
list = new ArrayList(); // tmp(ルーチン)処理のための配列
finlist = new ArrayList(); // 盤上の配列
}



// シャッフル
public ArrayList shuffle(int a){
int cntx = a;

for ( int i = 0; i <= 23; i++ ) {
list.add(i);
}

// リストの内容をシャッフルします。
for(int i=0; i <= cntx-1; i++ ){
Collections.shuffle(list);
}
return list;
}



/*
* 一枚選び、その上のカードを 後ろに配置
* 選んだカードは、2nd カード位置へ
* 選んだカードのプロパティから Numを取り出す。
*/

public ArrayList cRoutine(int b){
int jNum;


// 触機カードを選択し、上のカードは後ろに、カードは盤上に配置
jNum = list.get(b-1); //カードの十二支を表す。配置で使用。
System.out.println("触機カードの十二支"+jNum);

for(int i = 0; i <= b-2; i++){
list.add(list.get(0));
list.remove(0);

}
finlist.add(list.get(0));
list.remove(0);


// 1課〜4課/初伝〜末伝を上記と同じ方法
while(finlist.size()!= 8){
if(jNum <= 11){
for(int i = 0; i <= jNum-1; i++){
list.add(list.get(0));
list.remove(0);

}
finlist.add(list.get(0));
jNum = list.get(0);
list.remove(0);

}
else{
jNum = jNum - 12;

for(int i = 0; i <= jNum-1; i++){
list.add(list.get(0));
list.remove(0);
}
finlist.add(list.get(0));
jNum = list.get(0);
list.remove(0);

}
}

return finlist;
}


}




***********************************************************************
// gThink.java

package localhost.localhost;

import java.util.HashMap;
import java.util.Map;

/**
* 【 五行判定 】
*
* 引数に、2枚のカードの識別子を 与えると
* 相生・比和 or 相克の判定を "0"と"1"で返す。
*
* @author f1r3
*
*/


public class gThink {
// フィールド
int hantei; // 相生 or 比和 :0 相克: 1
Map map; // 識別子と五行(木、火、土、金、水)

// メソッド
public gThink(){
// 識別子と五行(木、火、土、金、水)の
// Tableの 作成

map = new HashMap();
}


public int gThin(int xId, int yId){

// キーと値のペアを追加
map.put(0,"土");
map.put(1,"火");
map.put(2,"火");
map.put(3,"木");
map.put(4,"土");
map.put(5,"木");
map.put(6,"土");
map.put(7,"金");
map.put(8,"土");
map.put(9,"水");
map.put(10,"金");
map.put(11,"水");
map.put(12,"水");
map.put(13,"土");
map.put(14,"金");
map.put(15,"金");
map.put(16,"土");
map.put(17,"火");
map.put(18,"火");
map.put(19,"土");
map.put(20,"木");
map.put(21,"木");
map.put(22,"土");
map.put(23,"水");

// 値取り出す
String str1 = map.get(xId);
String str2 = map.get(yId);
/*
* 木−土、木−金 ⇒ 相克
* 恋愛占いの場合は 比和も OKで捉えるので
* else で括る
*
* 相生・比和(正の意味) ⇒ 1
* 相克 ⇒  0
* を返す。
*/

if(str1.equals("木")){
if(str2.equals("土")||str2.endsWith("金")){
return hantei=0; // 相克

}
else{
return hantei=1; // 相生・比和
}
}

else if(str1.equals("火")){
if(str2.equals("水")||str2.endsWith("金")){
return hantei=0; // 相克
}
else{
return hantei=1; // 相生・比和
}
}

else if(str1.equals("土")){
if(str2.equals("木")||str2.endsWith("水")){
return hantei=0; // 相克
}
else{
return hantei=1; // 相生・比和
}
}

else if(str1.equals("金")){
if(str2.equals("木")||str2.endsWith("火")){
return hantei=0; // 相克
}
else{
return hantei=1; // 相生・比和
}
}

else if(str1.equals("水")){
if(str2.equals("土")||str2.endsWith("火")){
return hantei=0; // 相克
}
else{
return hantei=1; // 相生・比和
}
}

else{
System.out.println("その他");
return 0;
}

}
}

Random

全うなプログラミング経験のない自分が、恥を後でみるために残すメモ(Java歴1ヵ月?)
後で、ギャーってなるのだろうか。。。wwww
元ネタ


1.動かないので、拡張ループを避ける www
import java.util.ArrayList;
import java.util.Collections;

/**
* 重複しない1〜10の乱数を作成するサンプル
*
*/
public class RandomSample03 {

public static void main(String[] args) {

// 1 〜 10 の数値が入ったリストを作成
ArrayList list = new ArrayList();

for ( int i = 0; i < 10; i++ ) {
list.add(i);
}


// リストの内容をシャッフルします。
Collections.shuffle(list);
for( int i = 0; i < list.size(); i++ ) {

System.out.println("list[" + i + "]=" + list.get(i));
}
System.out.println();


// リストの内容をシャッフルします。
for( int i = 0; i < list.size(); i++ ) {
Collections.shuffle(list);
System.out.println("list=" + list);
}

System.out.println();


}

}


2.ジェネリック型の追加

import java.util.ArrayList;
import java.util.Collections;

/**
* 重複しない1〜10の乱数を作成するサンプル
*
*/
public class RandomSample03 {

public static void main(String[] args) {

// 1 〜 10 の数値が入ったリストを作成
ArrayList<Integer> list = new ArrayList();
for ( int i = 0; i < 10; i++ ) {
list.add(i);
}

// 拡張forループ
// リストの内容をシャッフルします。(1回目)
Collections.shuffle(list);

for( Integer num : list ) {
System.out.print(num + " ");
}

System.out.println(" ");

// リストの内容をシャッフルします。(2回目)
Collections.shuffle(list);
for( Integer num : list ) {
System.out.print(num + " ");
}

System.out.println();


}

}

横画面に固定する、縦画面に固定する(表示モードの固定)

AVDでだと、ctrl + F12

AndroidManifest.xml
manifest → application → activity
⇒screenOrientationを記述

(具体例)
横画面に固定
<activity android:screenOrientation="landscape">


参考元

ソニーの『開発18か条』

ソニーの『開発18か条』 リンク先 より、抜粋〜

第1条:客の欲しがっているものではなく客のためになるものをつくれ

第2条:客の目線ではなく自分の目線でモノをつくれ

第3条:サイズやコストは可能性で決めるな。必要性・必然性で決めろ

第4条:市場は成熟しているかもしれないが商品は成熟などしていない

第5条:できない理由はできることの証拠だ。できない理由を解決すればよい

第6条:よいものを安く、より新しいものを早く

第7条:商品の弱点を解決すると新しい市場が生まれ、利点を改良すると今ある市場が広がる

第8条:絞った知恵の量だけ付加価値が得られる

第9条:企画の知恵に勝るコストダウンはない

第10条:後発での失敗は再起不能と思え

第11条:ものが売れないのは高いか悪いのかのどちらかだ

第12条:新しい種(商品)は育つ畑に蒔け

第13条:他社の動きを気にし始めるのは負けの始まりだ

第14条:可能と困難は可能のうち

第15条:無謀はいけないが多少の無理はさせろ、無理を通せば、発想が変わる

第16条:新しい技術は、必ず次の技術によって置き換わる宿命を持っている。それをまた自分の手でやってこそ技術屋冥利に尽きる。自分がやらなければ他社がやるだけのこと。商品のコストもまったく同じ

第17条:市場は調査するものではなく創造するものだ。世界初の商品を出すのに、調査のしようがないし、調査してもあてにならない

第18条:不幸にして意気地のない上司についたときは新しいアイデアは上司に黙って、まず、ものをつくれ

コンテントプロバイダ(その2)

@コンテントリゾルバを 利用する

package localhost.localhost;

/**
* コンテントリゾルバを 利用して
* コンテントプロバイダを 使う
*
* 【概要】
* 標準アプリケーションである「ギャラリー」を 起動し、
* 写真を選択させ、 そのURIをもとに コンテントプロバイダから
* 画像を取り込む
*/


import java.io.*;
import android.app.*;
import android.content.*;
import android.graphics.*;
import android.net.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;

public class CResolver extends Activity
{
public static int SAMPLE_APP = 1;
Button bt;
private LinearLayout aLinearLayout;
ImageView aImageView;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
aLinearLayout = (LinearLayout) findViewById(R.id.main);

aImageView = new ImageView(this);
aLinearLayout.addView(aImageView);

}
// 結果を 受け取ったときに 処理を行う メソッド
public void onActivityResult(int reqcode, int result, Intent it)
{
if(reqcode == SAMPLE_APP && result == RESULT_OK)
{
Uri u = it.getData();
try
{
/*
* コンテントリゾルバのメソッドにより画像のURIを解析し、
* 入力ストリームを取得してデータを読み出す。
* 読みだしたデータをイメージビューに設定
*/

InputStream is = getContentResolver().openInputStream(u); // データのURIを 取得
Bitmap bmp = BitmapFactory.decodeStream(is); // ビットマップを取得
aImageView.setImageBitmap(bmp);
}
catch(Exception e){}
}
}

public void onClick(View v)
{
Intent it = new Intent();
it.setType("image/*");
it.setAction(Intent.ACTION_GET_CONTENT); // ギャラリーを 起動

// 標準アプリを起動し、そこから結果を取得するため、
// インテントにアクションを設定しstartActiveForResult()でアプリ起動

startActivityForResult(it, SAMPLE_APP);
}

}

エミュレータと位置情報

DDMS(Dalvic Debug Monitor Server)
位置情報を送信できる。

⇒ Window − Open Perspectiv − DDMS
⇒ Emulator Control − Location Controls

damyNow

コンテントプロバイダ

コンテントプロバイダは、URIを指定して

共有データに、アクセスするための仕組み。

画像・音声・動画などのファイルも、このしくみで共有される


☆コンテントプロバイダからデータを取得する方法

1.URIを指定してカーソルでデータの集合を読み込む(Dialist(2012/02/01) 参考)

2.コンテントリゾルバ クラスのメソッドで内容を読み込む。



【コンテントプロバイダの設計】
共有データ(連絡先、画像、音楽ファイル等)はデータの取得・挿入・削除が可能。

更にコンテントプロバイダを自分で設計して、他のアプリが自分のアプリで扱うデータを

公開することも可能。


設計には、ContentProviderクラスを拡張し、onCreate(),query(),insert(),delete()という

決められたメソッドを定義。

コンテントプロバイダ(その1)

例によって、リスナやGUI部分を
コードではなく、
絵をペタペタとしたいので、
その部分の修正版
P210



package localhost.localhost;

/**
* コンテントプロバイダ(その1)
* データの取得方法
* URIを指定してカーソルで データの集合を読む
* *************************************************
* カーソル
* データの集まりを 順番に操作する場合に使用。
*
* 3.0以降では、managedQuery(),startManagingQuery()
* といったメソッドは使わず、
* android.contentパッケージのCursorLoader クラスを使う。
*
* 【概要】
* 1.カーソルのmoveToNext()メソッドを使って、
* 順番に電話帳に登録されている 連絡先の名前を取得。
*
* 2.リストビューのアダプタに設定。連絡先の名前は「DISPLAY_NAME」
*/

import android.app.*;
import android.database.*;
import android.os.*;
import android.provider.*;
import android.widget.*;

public class DialList extends Activity {
/** Called when the activity is first created. */
private LinearLayout aLinearLayout;
private ListView lv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
aLinearLayout = (LinearLayout) findViewById(R.id.main);

lv = new ListView(this);
// 問合せ結果を カーソルとして得る
// コンタクトリストに 問い合わせる

Cursor cr = managedQuery
(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
startManagingCursor(cr);

/* Android 3.0以降 カーソルの取得には、
* managedQuery(),startManagingQuery()メソッドは使わない
*
* android.contentパッケージのCursorLoader クラスを使う
*
* 例)
* CursorLoader cl = new CursorLoader(this,
* ContactsContract.Contacts.CONTENT_URI,
* null, null, null, null);
* cr = cl.loadInBackground();
*
*/


ArrayAdapter ad = new ArrayAdapter
(this, android.R.layout.simple_list_item_1);
while(cr.moveToNext())
{
int i = cr.getColumnIndex("DISPLAY_NAME");
String str = cr.getString(i);
// アダプタに追加
ad.add(str);
}
cr.close();
// リストビューに アダプタを設定
lv.setAdapter(ad);

aLinearLayout.addView(lv);
}
}

Appendix

日本語→英語自動翻訳【星条旗】

English English得袋.com

カレンダー

04 | 2012/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

検索フォーム