Androidプログラミング質問スレ Part23
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/06/19(火) 19:57:12.12※プログラミング自体が初めて!なあなたには↓↓↓こちらへ
スレ立てるまでもない質問はここで 118匹目
http://toro.2ch.net/test/read.cgi/tech/1331904826/
Eclipse統合M32【Java/C++/Ruby/Python/Perl】
http://toro.2ch.net/test/read.cgi/tech/1320318310/
★★Java質問・相談スレッド153★★
http://toro.2ch.net/test/read.cgi/tech/1334438859/
****関連リンク****
■ Android developers http://developer.android.com/
■ ソフトウェア技術ドキュメントを勝手に翻訳 http://www.techdoctranslator.com/
****前スレ****
Androidプログラミング質問スレ Part22
http://toro.2ch.net/test/read.cgi/tech/1337170429/
0294デフォルトの名無しさん
2012/07/02(月) 01:20:39.19ん? アプリ起動時にアルバム情報とアートを全取得してるの?
CursorAdapter使えばいいんじゃなかろうか
0295デフォルトの名無しさん
2012/07/02(月) 01:24:38.34Threadはクラス、Runnableはインターフェイス
「Thread Runnable 違い」ででもggr
0296デフォルトの名無しさん
2012/07/02(月) 07:35:22.15class service implements runable{
}
service servive=new service();
while(connect())new thread(service).start();
とかいう使い方を基本として考えて設計されたから、そういう使われ方が多いんじゃないかってことだ。
0297デフォルトの名無しさん
2012/07/02(月) 11:44:42.41多くのサンプルをネットで見させて頂いたのですが、基本的に呼び出し方法が
ソース内で宣言するタイプにHandlerを記載するタイプしか見当たりませんでした。
new Thread(new Runnable() {
}
0298デフォルトの名無しさん
2012/07/02(月) 11:56:27.350299246
2012/07/02(月) 12:45:00.44おお、データベース化出来そうな雰囲気ですね。
>>294
そうなんですよ。差分の取得方法が分からないので、
現在は起動時に全読み込みに戻してしてしまってます。
CursorAdapterも調べてみますね。ありがとうございます。
0300デフォルトの名無しさん
2012/07/02(月) 13:12:40.57SPモードメールがプッシュ型のメール受信を行っているとのことで、
ttp://android-inf.com/archives/501
のページを参考に、WAP_PUSH_RECEIVEDをonReceiveで受信するように
BroadcastReceiverを継承したクラスを作成したのですが、インテント
を受信できませんでした。
※ネットワーク変更などのインテントは受信できていることは確認
しているので、フィルターだけの問題かとおもっています。
SPモードメールのインテント受信を行うには、どのintent-filterを
指定すればよいでしょうか?
使用端末:sh-01d
android :2.3.5
0301297
2012/07/02(月) 13:18:06.19インターネット上にあるサンプルだと大体が、ソース内でThreadを作ってそこにThradの中身を書いておりますが
個人的には分けたいと思っています。
その場合こう書けばいいのでしょうか?
//呼び出し
class main {
ThreadClass tc = new ThreadClass();
}
//スレッド
public class ThreadClass extends Thread implements Runnable
{
Handler hi = new Handler();
public void run()
{
hi.post(new Runnable() {
public void run () {
//処理
}
});
}
}
自分で確かめた結果だと現状Looper.prepare()部分でnot called呼ばれてないエラーが出てるので書き方として
あってるかが分からない現状です。
開発媒体がProcessingなので中々…
0302297
2012/07/02(月) 13:20:22.91Handlerをnewする時にLooper.getMainLooper()を渡してやれば良いみたいです。
書き方としては問題ありませんでした
0303デフォルトの名無しさん
2012/07/02(月) 13:25:47.690304デフォルトの名無しさん
2012/07/02(月) 13:28:12.340305デフォルトの名無しさん
2012/07/02(月) 13:44:56.660306デフォルトの名無しさん
2012/07/02(月) 13:48:49.31Handlerのコンストラクタで引数なしだと、
作成されたスレッドのLooperが自動的に設定される。
スレッド側で作成するときはコンストラクタでメインのLooperを渡しておくこと。
0307297
2012/07/02(月) 16:10:35.72実機・エミュ共に現状動作はするのだが、描画処理中は他の操作を一切受け付けなくなってしまった
(描画中、mainでの操作が出来ない)
添削した簡単なソース
http://ideone.com/v6HRo
現在のソースをHandler削除して、Javaで描画すれば動作は受け付けるのだが
Handlerの何が邪魔してるのだろうか?
0308デフォルトの名無しさん
2012/07/02(月) 16:21:33.95無心になれ
0309デフォルトの名無しさん
2012/07/02(月) 16:32:21.220310297
2012/07/02(月) 16:36:59.340311デフォルトの名無しさん
2012/07/02(月) 16:39:16.720312デフォルトの名無しさん
2012/07/02(月) 16:44:01.180313297
2012/07/02(月) 16:47:27.120314デフォルトの名無しさん
2012/07/02(月) 16:52:11.12MainLooperを使いまわしてるからじゃないの?
MainLooperを使うってことは、処理を描画スレッドで行うってことだから。
ThreadとHandlerとLooperの使い方は
LooperのJavadocにコードの例が載ってるから見るといい。
HandlerThreadでもいいと思うけど。
0316デフォルトの名無しさん
2012/07/02(月) 17:07:52.78スレッドとハンドラーの生成はメインで行なって、
ハンドラーへ渡すRunnableを描画処理等を持たせた別クラスにすればイイんじゃ?
0317デフォルトの名無しさん
2012/07/02(月) 17:22:29.88いろんなところで日本語キーボードの設定方法を調べてたんだけど、結局できなくて困ってる。
「言語の入力 > 言語設定→言語を選択」で、Android全体の言語は「日本語(日本)」に設定できたんだけど、
「言語の入力 > キーボード→設定入力方法の設定 > Androidキーボード→有効な入力方法」の中に、「日本語のキーボード」とかそれらしいものが表示されないんだ。
分かる人がいたら教えてほしい。
0318デフォルトの名無しさん
2012/07/02(月) 18:10:27.79外国人の不正受給に関しても、まずは日本人の、真面目に義務を果たしている人が優先。
今は特に、韓国なんてすごく豊かなんですから」と持論を展開し、
「私に対してもいろいろ嫌がらせがあったが、どこから来ているかはわかるんですよね。私たちの日本を愛するマグマの方が強いことを教えよう。
日本が正直者が報われる、本当に強い国にもう1度なれるように、私たちががんばりましょう」
と呼びかけると、参加者からは大きな拍手が起こった。
http://www.j-cast.com/2012/07/01137691.html?p=all
http://www.j-cast.com/images/2012/news137691_pho01.jpg
http://www.j-cast.com/images/2012/news137691_pho02.jpg
前
http://engawa.2ch.net/test/read.cgi/poverty/1341150152/
http://engawa.2ch.net/test/read.cgi/poverty/1341153256/
0319デフォルトの名無しさん
2012/07/02(月) 22:23:38.51今まさにServiceとThread使ってこねこねしている所なので
俺でも何かアドバイスとか出来るかなってソース見てみたが
そのソースでは何がやりたいのかさっぱりわからんちん
ごめんね、役立たずでごめんね
0320デフォルトの名無しさん
2012/07/03(火) 08:58:37.04アップルの特許を侵害した可能性が大きいという理由だ。
特に「ギャラクシーネクサス」がアップルの特許を侵害したとされた技術は
サムスンの最新スマートフォン「ギャラクシーS3」にも一部適用されたことがわかり波紋が予想される。
http://japanese.joins.com/article/696/154696.html?servcode=300§code=300
0321デフォルトの名無しさん
2012/07/03(火) 09:13:26.35いま仮想デバイス作って起動してみたら普通に出てきたが
http://i.imgur.com/wpsBz.png
0322297
2012/07/03(火) 09:32:13.11http://ideone.com/iw6D7
(仮)
class main と class ThreadClassは別ファイルとなります。
class mainで宣言して、描画処理をThreadClassに丸投げします
class mainでは、何を描画するかを選択します
main部分はAndroidではないので、Activityではないです
0323デフォルトの名無しさん
2012/07/03(火) 09:34:12.950324デフォルトの名無しさん
2012/07/03(火) 09:44:56.06ThreadClass自身なのに
0325デフォルトの名無しさん
2012/07/03(火) 09:53:59.59マジか。
結局表示されなかったから、何とか実機を調達することにしたぜ・・・
0326デフォルトの名無しさん
2012/07/03(火) 09:58:28.54よくみたらそれじゃLooper設定されてないよ
ソース見れるなら親クラスのrunメソッド見てみるといいLooperをメンバに格納してるから
何が足りないかというと
super.run();
0328デフォルトの名無しさん
2012/07/03(火) 10:03:06.58っていうことをなんで何回も言わせるのか
0329デフォルトの名無しさん
2012/07/03(火) 10:07:55.49ああ24行目にsuper.run();を書くといいよってことです
0330297
2012/07/03(火) 10:18:18.31LogCat何て搭載していないんだ(Eclipseじゃない)
printStackTrace()だと、さっきのソースじゃ何もなしだった、そのまま停止
println("test");
hl = new Handler(so.getLooper());
println("test2");
でかこって、最初のtestだけ表示されてフリーズ
Handlerの中を空白にしたらtest2まではいったけどそのまま終了で処理入らない
>>329
�dクス、入れてみたらRuntimeException発生して
Can't Create handler inside thread that has not called Looper.prepre();
が出るようになって、Looperが呼ばれてないからハンドラ作れないって言われてしまった。
他の場所が悪そうなので思考中(´・ω・`)
0331デフォルトの名無しさん
2012/07/03(火) 10:23:50.93Looper.prepareは親run()がやってるから、実行できるのはスレッドごとに一回だけなので二度目以降やるとRuntimeExceptionが発生するよ
だからLooper.prepareを書く必要はない
HandlerThread#run()の中身参考に貼っとくわ
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
0332297
2012/07/03(火) 10:37:23.24super.run()を追加してからのエラーに関しては、テストで試してた処理がコンストラクタにいて、そいつが働いてエラーになってたので
本件とは関係無し。
で、その辺なのを抜いて
super.run();
println("test");
Looper.prepare(); // ある・なしの両方
↑これを試してみたのだけれど、super.run()がいるとThread側はその場でフリーズしてしまうぽい
main側は動作が出来てボタンを押すと、println("aiueo")みたいなのは出せるんだが、一回出してしまうと
main側も止まってしまう
ということで、またちょっと考えてみます(´・ω・`)
0333297
2012/07/03(火) 10:51:04.80現在このような感じ、手間取らせて申し訳ない
0334デフォルトの名無しさん
2012/07/03(火) 10:56:00.03消してみて
あとわかりやすいように20行目に
@Override
public void run()
って書いておいて
0335297
2012/07/03(火) 11:08:43.72http://ideone.com/t3D3x
加筆修正
0336デフォルトの名無しさん
2012/07/03(火) 11:14:13.36格安iPhoneEラーニング(学習動画多数あり)
http://tinyurl. com/7wj77om
コワーキングスペースJP
http://tinyurl. com/76vdrny
コワーキング帳
http://tinyurl. com/brzs486
WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみやる
ASP.net(C#)+管理EXEアプリ(C#)+iPhone C#のソースを出さなければWEBアプリの著作権も守れる
C#マーケット Windows8 Metroアプリ WindowsPhone Surface PS Vita Xbox360 iphone(mono使用)
iPhoneマーケット iPhone iPad 予定 iTv iCar i (家電製品)
地方に安い土地を買いコンテナ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィス・コワーキングで収入を得ながらそこでアプリを開発する
http://tinyurl. com/7pb2yaa
http://bit. ly/iLIpJa
0337デフォルトの名無しさん
2012/07/03(火) 11:23:16.29ごめ
よくわからなくなったから自分で書いてみた
http://ideone.com/Gmfoo
求めてるものかどうかわからないが
0338297
2012/07/03(火) 11:58:24.89thx、これを元にちょっと弄ってみたい。
main側での呼び出しは増やしたくないんだよね。
というのもmain側はProcessingで作成されてて、HandlerThreadを宣言すると
シンボルを見つけられません。
[java c] シンボル:メソッド HandlerThread(java.lang.String)
でエラーになるのだ(´・ω・`)import出来るんだけどね…
0339デフォルトの名無しさん
2012/07/03(火) 12:33:40.23> LogCat何て搭載していないんだ(Eclipseじゃない)
logcatはEclipseの機能じゃない
adbさえあれば見れる
0340297
2012/07/03(火) 12:53:21.37これか(´・ω・`)!導入出来るかちょっと試しつつ、色々弄ってみる
0341デフォルトの名無しさん
2012/07/03(火) 20:38:40.34>>297がやりたいことって
class main{
// 描画する絵を選択する処理
// int i = checkInputKey(); //入力されたキー番号を取得
Hoge hage = new Hoge();
hage.setDrawPattern(i); //描画するパターンiを渡す
}
public class Hoge{
private final HandlerThread mThread;
private final Handler mHandler;
public Hoge() {
mThread = new HandlerThread("hage");
mThread.start();
mHandler = new Handler(mThread.getLooper());
}
public void setDrawPattern(int i){
switch(i){
case 1:
mHandler.post(new Runnable() {public void run () { /* 描画処理1 */}});
break;
case 2:
// 以下略
}
}
}
こういうことじゃないのけ?
0342246
2012/07/03(火) 20:48:42.45見事、データベース曲が追加されたんだが、TITLE以外に、ALBUM、ARTIST、IDと全てのカラムが
データベースに追加されたんだけどどうしてですかね?
public void checkUpdate(){
ContentResolver cr = getApplicationContext().getContentResolver();
c = cr.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media._ID},null,null,MediaStore.MediaColumns.DATE_ADDED + " DESC");
c.moveToFirst();
String str1 = c.getString(c.getColumnIndex(MediaStore.Audio.Media.TITLE));
if(str1 != null){
DatabaseOpenHelper dbHelper = new DatabaseOpenHelper(getApplicationContext());
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", str1);
db.insert("songTrack", null, values);
db.close();
}
}
0343246
2012/07/03(火) 20:55:54.30whileもforも使ってないのに。どういう理論か分かる方いらっしゃいます?
やりたいことが全部出来てしまったんで嬉しいんですけど気味が悪くて…。
0344デフォルトの名無しさん
2012/07/03(火) 21:25:13.820345デフォルトの名無しさん
2012/07/03(火) 21:27:27.090346246
2012/07/03(火) 21:44:28.22すみません。甘え過ぎなのでこれ以降自粛します。
SqlOpneHelper側
@Override
public void onCreate(SQLiteDatabase db) {
db.beginTransaction();
try{
StringBuilder createSql = new StringBuilder();
createSql.append("create table " + TABLE_NAME + " (");
createSql.append(COLUMN_ID + " integer primary key,");
createSql.append(COLUMN_TITLE + " text,");
createSql.append(COLUMN_ARTIST + " text,");
createSql.append(COLUMN_ALBUM + " text,");
createSql.append(COLUMN_ALBUM_ART + " text");
createSql.append(")");
db.execSQL( createSql.toString());
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
0347デフォルトの名無しさん
2012/07/03(火) 21:48:48.201回ぐらいなら大目に見るけどさ
0348デフォルトの名無しさん
2012/07/03(火) 21:52:03.87なんで私物化してんのこいつ
0349デフォルトの名無しさん
2012/07/03(火) 21:59:24.20目の錯覚じゃね
0350デフォルトの名無しさん
2012/07/03(火) 22:03:25.69あと、MediaStoreって便利なコンポーネントがあるのに
自前でテーブル持つメリットがいまいちわからないんだが必要?
>>342のCursor使ってCursorAdapter構築してリストビューに反映させればいいんでないかと
SD抜き差しでMediaStoreが更新されるけどそのたびに自前のテーブルも更新しなきゃいけないのは面倒でしょう
0351デフォルトの名無しさん
2012/07/03(火) 22:05:07.86一部プログラマからは家に帰ってもコード見せるのかよと反発かうかもなw
0352デフォルトの名無しさん
2012/07/03(火) 22:34:13.71ぐぐってもわからなくて最終手段としてここで聞くもんじゃないの?w
0353デフォルトの名無しさん
2012/07/03(火) 22:36:43.50ぐぐってもわからないほどのことは、ここの人たちに答えられたためしがないので
最初にここで聞くようにしています
0354デフォルトの名無しさん
2012/07/03(火) 22:39:54.690355デフォルトの名無しさん
2012/07/03(火) 22:42:24.730356246
2012/07/03(火) 22:46:17.82すんません。自粛しますw
>>349
錯覚でしたw でも何でこのコードで複数のデータがデータベースに登録されるのかは依然謎ですけどw
>>350
実際、ContentProviderの併用で同じこと全部できるし、そちらの方がおっしゃる通り簡単なんですが、
アーティスト欄でアルバムが何枚あるかとかタイトル欄で曲の再生時間はいくつあるとか
毎回計算して表示してしまうと、曲数が多くなれば多くなる程動作面で不安が出てくると思うんです。
なので少しでも処理を軽くするためのデータベース化なんですね。
殆どのミュージックプレイヤーがデータベース化しているのもその為なのかと。
>>351
そうですよね。気をつけます!
0357デフォルトの名無しさん
2012/07/03(火) 23:05:16.550358デフォルトの名無しさん
2012/07/04(水) 00:00:35.410359デフォルトの名無しさん
2012/07/04(水) 00:31:44.59ソニエリ系端末とサムソン系端末では動きが全然違うんだな。
0360デフォルトの名無しさん
2012/07/04(水) 01:05:07.33AlarmManagerを使って定期的にアプリを起動しているのですが
起動時間に別のアプリを操作していた場合、裏で起動するというような
事はできないでしょうか?
0361デフォルトの名無しさん
2012/07/04(水) 01:17:16.38サービスにすればいいんじゃね?
0362デフォルトの名無しさん
2012/07/04(水) 01:27:26.990363デフォルトの名無しさん
2012/07/04(水) 07:53:00.87AlarmManagerが悪いのか、WakeLockが悪いのか、機種が悪いのか・・
でもサービスにすると「常駐死ね☆1」とかあるしなぁ
0364デフォルトの名無しさん
2012/07/04(水) 08:27:43.76おおかたbroadcastハンドラの外でlock取ろうとしてるんだろ
タイマーで直接サービス上げるのも御法度
0365297
2012/07/04(水) 10:26:31.09>>341
神いわゆるGOD、うまくいくようになりますた。
後は他に影響があった操作を直すだけですみそうです。
次からThread分けるときはこれを応用させて頂きます(;´Д`)ハァハァ
0366デフォルトの名無しさん
2012/07/04(水) 10:45:30.74> これを応用させて頂きます
いや、お前がやらなければならないことは、
なぜお前のやり方がとダメで、>>341のやり方なら上手く行くのか、
そこらへんをきちんと理解することだ
そうしないと、また別のところで同じようにドはまりするだけだよ
0367297
2012/07/04(水) 10:53:51.28思ったことはstart()さした中でやってるからだと
初期のpgでは
HandlerThread test = new HandlerThread("test")
test.start();
で、中身でthis.getLooper()をやってたわけですが
図で書くと
test -----------------
| handler
|
|____________________________________
今回の場合は
test --------------------
|
|__________________________________
handler-----------------
|
|_________________________________
中身にhandlerを書いたらうまくLooperをキャッチできていないのかなと
0368297
2012/07/04(水) 10:56:31.28Thread作成→スタート→Handlerという流れにしないといけないわけで、Thread側に継承させたら
Handler内部の操作が出来ないしと うまく説明できませんが(;´Д`)
であればThread作成用のClassを作って、内部で同じようなことをやらせれば良いかと
0369297
2012/07/04(水) 11:00:58.67呼び出されるクラス----------------------
|
| thread-------------------------------
| |
| | Looper獲得用
| |______________________________________________________
|
| handler------------------------------
| | GUI部分の処理
| | public void run() {
| | スレッドに任せたいGUI処理
| |____}_____________________________________________
|
| その他関数
|________________________________________________________
こんなメソッドを作るみたいな
0370デフォルトの名無しさん
2012/07/04(水) 11:01:48.500371297
2012/07/04(水) 11:12:50.240372デフォルトの名無しさん
2012/07/04(水) 11:15:10.240373デフォルトの名無しさん
2012/07/04(水) 11:16:33.120374デフォルトの名無しさん
2012/07/04(水) 11:21:48.060375デフォルトの名無しさん
2012/07/04(水) 12:15:17.01ありがとうございます。
サービスで常駐させて時間のチェックをし、時間がきたらIntentで
アプリを起動させるということですね。
その場合、「起動時間に別のアプリを操作していた場合、裏で起動する」
という部分はどのように実装すればよいのでしょうか?
0376デフォルトの名無しさん
2012/07/04(水) 13:12:05.16その「裏で起動しておこなっていた処理」をサービスにしろ、ってことじゃねぇの?
0377デフォルトの名無しさん
2012/07/04(水) 13:16:04.960378デフォルトの名無しさん
2012/07/04(水) 13:31:05.02・ユーザーIDの共有
・コンテントプロバイダ
・ファイルパーミッションの変更(+SharedPreference)
・データベースファイルのアクセス権限を利用
あたりがあることを知ったのですが、いまいち使い分けが分かりません。
多少面倒な事や、層があることで僅かながら呼び出しコストがあるかもしれない(想像です)を
除けば、コンテントプロバイダ+署名共有が良さそうに思うのですが、
他に理由があったりしますでしょうか?今のところ、データは簡単な文字列が幾つか、程度ではあるのですが。
0379デフォルトの名無しさん
2012/07/04(水) 15:27:39.00フェードインしてフェードアウトとかすることはできますか?
0380デフォルトの名無しさん
2012/07/04(水) 15:31:51.240381デフォルトの名無しさん
2012/07/04(水) 16:03:43.14参考サイトみたいなのないですか?FlipperViewとかならそこらへんに沢山あるんですけど。
0382デフォルトの名無しさん
2012/07/04(水) 18:29:14.990383デフォルトの名無しさん
2012/07/04(水) 18:35:57.53参考サイト http://lablog.lanche.jp/archives/220
リストアダプター / getView
iv = (ImageView) view.findViewById(R.id.image);
if ( リストに表示する画像Uri != null ) {
String thumbUrl = リストに表示する画像Uri.toString();
iv.setTag(thumbUrl);
ImageGetTask task = new ImageGetTask(iv);←ここで強制終了
task.execute(thumbUrl);
}
Asynkのコンストラクタ
public ImageGetTask(ImageView image) {
0384デフォルトの名無しさん
2012/07/04(水) 18:59:03.700385デフォルトの名無しさん
2012/07/04(水) 19:00:06.100386デフォルトの名無しさん
2012/07/04(水) 19:02:24.930387デフォルトの名無しさん
2012/07/04(水) 19:02:32.370388デフォルトの名無しさん
2012/07/04(水) 19:05:31.19Logcat見ないの?
スタックトレース貼らないとエスパー待ちになります
0389デフォルトの名無しさん
2012/07/04(水) 19:08:38.930390デフォルトの名無しさん
2012/07/04(水) 19:11:25.230391デフォルトの名無しさん
2012/07/04(水) 19:16:45.68デバッグの方にListViewに関してのエラーのような記述がありますが。
>>385
それっぽいです。ありがとうございました。
0392デフォルトの名無しさん
2012/07/04(水) 19:31:43.540393デフォルトの名無しさん
2012/07/04(水) 19:36:55.70■ このスレッドは過去ログ倉庫に格納されています