アプリ作って海外移住

コピペプログラマーのメモ

重たい処理は 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(); //ダイアログの終了
}
};