Начиная с Android 4.0 У меня проблема (на 2.3.6 она работает).Только исходный поток, создавший иерархию вида, может коснуться его views.onProgressUpdate
onProgressUpdate
он должен быть уже в потоке пользовательского интерфейса. Я пробовал activity.runOnUiThread
сейчас с версией Handler
, ofc сначала был без любого из tham. Как это исправить?
public class ReadDataTask extends AsyncTask<String, String, JSONArray> {
private Activity activity;
protected ProgressDialog dlg;
private long startRead, endRead, endJson;
public ReadDataTask(Activity activity) {
this.activity = activity;
dlg = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dlg.show();
startRead = System.currentTimeMillis();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
if (values != null && values.length > 0) {
final String msg = values[0];
new Handler().post(new Runnable() {
public void run() {
dlg.setMessage(msg);// android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
}
});
}
}
@Override
protected JSONArray doInBackground(String... params) {
... long task here
publishProgress("Converting to JSON: " + (1 + i) + "/" + dataList.size());
Пожалуйста, разместите трассировку стека. – CommonsWare
@CommonsWare обновлен скриншотом, также отмечена строка кода в источнике, где это происходит. Перемещено \t \t dlg = новый ProgressDialog (активность); topreExecute() и по-прежнему имеют ошибку –
Удалите элементы «Handler» и повторите попытку с помощью 'dlg.setMessage()', вызываемого непосредственно в 'onProgressUpdate()'. Если вы получаете то же исключение, опубликуйте * полный * стек трассировки. Вы можете сделать это, выделив строки, скопировав их в буфер обмена (например, Ctrl-C) и вставив их здесь в формате источника. В несвязанной заметке удалите член данных 'activity', поскольку единственным местом, где вы можете использовать его вне конструктора, является' doInBackground() ', что является одним из мест, где вы должны * не * ссылаться на активность, к изменениям конфигурации. – CommonsWare