重たい処理は thred run クルクル回るダイアログ表示 handle が重要
adapter.notifyDataSetChanged();で、
calledfromwrongthreadexception エラー
答え handle ないで実行
final Handler mHandler = new Handler(); Thread trd = new Thread(new Runnable(){
public void run() {
try{
Thread.sleep(1000);
Log.d("thred", "-------start");
/////////////////////重い処理
mthredBusy = true;
String path3 = koresultgazou.fromGoogleDriveGazou(uri, displayName);
//////////////////////////// contentResolver update
ContentValues values = new ContentValues();
ContentResolver contentResolver = callingActivity.getContentResolver();
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put("_data", path3); // 画像の保存されたフルパス
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//path = MainActivity.E1N_STORAGE+"/"+displayName;
Log.d("thred", "-------end");
// list3Ko.get(finalPosition).setItem8(null);
Bitmap Item8= koresultgazou.inTanmatsuGazouGetBmp(path3);
list3Ko.get(finalPosition).setItem8(Item8);
mthredBusy = false;
mHandler.post(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
}catch (InterruptedException e){
}
}
});
trd.start();
}else{//tanmatsu
Bitmap Item8= koresultgazou.inTanmatsuGazouGetBmp(path2);
list3Ko.get(position).setItem8(Item8);
}
- 画面表示に関する場合 GV LV など Handler が必要。
- Handler の中で、重たい処理が終わった時の記述をする
// アダプターにデータ変更の通知
adapter.notifyDataSetChanged();
// GridViewの再描画
gv.invalidateViews();
- -------extends Activity implements Runnable となる。
/////////////////////////////////////////////////以下 コード例
private void pdf_sakusei() {
pg = new ProgressDialog(this);
pg.setTitle("処理中");
pg.setMessage("しばらくお待ちください...");
pg.setIndeterminate(true); //進捗が分からないことを示す
pg.setProgressStyle(ProgressDialog.STYLE_SPINNER);//クルクル回るタイプのダイアログ
pg.show(); //表示開始
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
// TODO 自動生成されたメソッド・スタブ
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
//ここに時間のかかる処理を記述
File dir = Environment.getExternalStorageDirectory();//SDカードにアクセス
Test t = new Test();
t.readFolder( dir );
Collections.sort(ko_list, new Sort_kolist());//昇順にソート
Collections.reverse(ko_list);//それを逆にする 降順になる
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
//終了処理を記述
// アダプターにデータ変更の通知
adapter.notifyDataSetChanged();
// GridViewの再描画
gv.invalidateViews();
pg.dismiss(); //ダイアログの終了
}
};