eas*_*ese 4 multithreading android android-asynctask
我正在使用AsyncTask下载一个带有progressdialog的数据库,该数据库显示了UI的进度.我的一些用户收到错误:
CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图.
据我所知,只有在尝试从UI线程更新Views时才会发生这种情况.这是错误:
com ... updateops.DbCreate.onProgressUpdate(DbCreate.java:70)at 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);
}
Run Code Online (Sandbox Code Playgroud)
它看起来像我正在遵循我应该做的事情,以避免这个错误.有人知道为什么会这样吗?
编辑:我还应该提到这段代码大部分时间都有效.我在Developer Console上收到崩溃报告.
根据onProgressUpdate(Progress ...)在调用publishProgress(Progress ...)之后在UI线程上调用.
您应该分析整个日志报告,以检查是否有可能在其他线程上创建了异步任务.
如果您真的找不到根本原因,可以使用在UI线程上创建的处理程序来解决.
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |