RunOnUiThread не работает в AsyncTask

Я кодирую программу, которая извлекает данные из MySql с сервера (используя JSON) и обновляет интерфейс ,

Я извлекаю два типа данных, используя AsyncTask с сервера

1) Bubble Answers 2) Comments 

Метод parseBubbleAnswers успешно запускается и обновляет UI, но класс parseComments, который является AsyncTask, и который вызывает метод parseComments в doInBackground, не запускает runOnUiThread(new Runnable() { run() });

Может ли кто-нибудь помочь мне в решении этой проблемы?

Вот мой код:

 public class FetchServer extends Activity { protected void onCreate(Bundle savedInstanceState) { String photoId = "1"; // photo id for which the data is fetched checkBubbleData(photoId); // which call AsyncTask - 2 differnt calls } public void checkBubbleData(String photoId) { new parseBubbleAnswers().execute(photoId); // to fetch bubble answers new parseComments().execute(photoId); // to fetch comments } class parseBubbleAnswers extends AsyncTask<String, Integer,String> { @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub Looper.prepare(); parseBubbleAnswers(); // which has runOnUiThread(new Runnable() which updates (successfully !) the UI return null; } } class parseComments extends AsyncTask<String, Integer,String> { @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub Looper.prepare(); String parseComReturn = parseComments(); if(parseComReturn=="end") { commentBuilder(); // which will update UI after fetch data by parseComments() method } } } public void commentBuilder() { runOnUiThread(new Runnable() // while debugging, it comes here, on Step Over it stick for 2 times and then move at the end of method without error { public void run() { // update UI code } }); } } 

Попробуйте так:

Сначала создайте один Handler :

 Handler mHandler = new Handler(); 

Измените это,

 public void commentBuilder() { runOnUiThread(new Runnable() // while debugging, it comes here, on Step Over it stick for 2 times and then move at the end of method without error { public void run() { // update UI code } }); } 

С,

 public void commentBuilder() { new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while (isRunning) { try { // Thread.sleep(10000); mHandler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub // Write your code here to update the UI. } }); } catch (Exception e) { // TODO: handle exception } } } }).start(); } 

Остановите поток этим, как только вы закончите с пользовательским интерфейсом,

 isRunning = false; 

РЕДАКТИРОВАТЬ :

Попытайтесь использовать задачу Async следующим образом:

 class parseComments extends AsyncTask<String, Integer,String> { protected String doInBackground(String... params) { String parseComReturn = parseComments(); return parseComReturn; } protected void onPostExecute(String result) { if(result.equals("end")) { commentBuilder(); } } } 

Благодарю.

runOnUiThread – это метод Activity , AsyncTask не имеет ссылки на Activity.

Однако AsyncTask уже работает в потоке пользовательского интерфейса и был разработан таким образом.

Просто рассмотрите изменения пользовательского интерфейса в onPostExecute .