我正在使用 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);
}
在我看来,我完全按照我应该做的事情来避免这个错误。有人知道为什么会这样吗?
编辑:我还应该提到,这段代码大部分时间都有效。我在开发者控制台上收到崩溃报告。