AsyncTask を使用して、UI に進行状況を示す進行状況ダイアログでデータベースをダウンロードしています。一部のユーザーがエラーを受け取ります:
CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。
私が理解しているように、これは、UI スレッドからビューを更新しようとしている場合にのみ発生するはずです。エラーは次のとおりです。
com...updateops.DbCreate.onProgressUpdate(DbCreate.java:70) com...updateops.DbCreate.onProgressUpdate(DbCreate.java:1) で
ここに私のコードがあります:
public class DbCreate extends AsyncTask<String, String, String>{
private static Context mCtx;
private static ProgressDialog mDialog;
public static AmazonSimpleDBClient mSDbClient;
public static AmazonS3Client mS3Client;
private static int mAppVersion;
private static boolean mCreate;
public DbCreate(Context ctx, int versionCode, boolean create) {
mCtx = ctx.getApplicationContext();
mAppVersion = versionCode;
mDialog = new ProgressDialog(ctx);
mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mDialog.setMessage("Checking for server access. Please wait...");
mDialog.setCancelable(false);
mDialog.setMax(1);
mDialog.show();
mCreate = create;
}
protected void onProgressUpdate(String... name) {
if (name[0].equals("item")) {
mDialog.incrementProgressBy(1);
} else if (name[0].equals("setMax")) {
mDialog.setProgress(0);
mDialog.setMax(Integer.parseInt(name[1])); <-- This is line 70
}}
@Override
protected String doInBackground(String... arg0) {
**do stuff**
publishProgress("setMax", ""+ 3);
}
このエラーを回避するために、私がすべきことを正確に実行しているように見えます。なぜそれが起こっているのか知っている人はいますか?
編集:このコードはほとんどの場合機能することにも言及する必要があります。開発者コンソールでクラッシュ レポートを受信しています。