2013-08-25 2 views
0

У меня возникла странная проблема с андроидной деятельностью: я повторно использовал одно из своих предыдущих действий, которое хорошо работает, но на этот раз все У меня есть «Не удается создать обработчик внутри потока, который не вызвал Looper.prepare()»«Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare()» в AsyncTask

Я попытался отлаживать, и все в async-программе выполняется хорошо, но когда я дойду до конца onPostExecute(), ошибка возникает.

Итак, я попытался отключить мой процесс в диалоге процесса, единственное изменение - это то, что он сбой на линии сверху.

Вот код:

public class DateActivity extends ActionBarActivity{ 
    ProgressDialog mProgressDialog; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_date); 

     ActionBar actionBar = this.getSupportActionBar(); 

     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setTitle(getResources().getString(R.string.actionbar_titre_date)); 

     if (VerifConnexion.isOnline(this)) { 


      this.mProgressDialog = ProgressDialog.show(this, getResources().getString(R.string.loading), 
        getResources().getString(R.string.loading), true); 

      new QueryForDateTask().execute(this.mProgressDialog, this, this.getApplicationContext()); 
     } else { 

      ... 
       } 
      }); 
      alertDialog.show(); 
     } 

    } 



    private class QueryForDateTask extends 
      AsyncTask<Object, Void, ArrayList<String>> { 

     private ProgressDialog mProgressDialog; 
     private Activity act; 
     private Context context; 

     protected ArrayList<String> doInBackground(Object... o) { 


      this.mProgressDialog = (ProgressDialog) o[0]; 
      this.act = (Activity) o[1]; 
      this.context = (Context) o[2]; 

      ArrayList<String> listeDate = this.parseJSON(this.startQuerying()); 


      return listeDate; 

     } 


     public JSONObject startQuerying() { 

      JSONRequest jr = new JSONRequest(); 


      String from = getResources().getString(R.string.api_param_from); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.FRANCE); 
      from += "=" + sdf.format(new Date()); 

      String url = getResources().getString(
        R.string.api_dates_json); 


      JSONObject jo = jr.getJSONFromUrl(url + "?" + from); 

      return jo; 

     } 


     public ArrayList<String> parseJSON(JSONObject jsonObject) { 

      ArrayList<String> l = new ArrayList<String>(); 

      try { 
       JSONArray array = jsonObject.getJSONArray("dates"); 

       if (array != null) { 

        for (int i = 0; i < array.length(); i++) { 
         String type = array.getString(i); 
         l.add(type); 

        } // fin parcours JSONArray 

       } 

      } catch (Exception _e) { 

      } 

      return l; 
     } 

     protected void onProgressUpdate(Integer... progress) { 
      // setProgressPercent(progress[0]); 
     } 


     protected void onPostExecute(ArrayList<String> lDate) { 

      // Create items for the ListView 
      DateAdapter adapter = new DateAdapter(this.context, R.layout.searchitem_date, lDate, this.act); 
      // specify the list adaptor 
      ((ListView)findViewById(R.id.list)).setAdapter(adapter); 
      this.mProgressDialog.dismiss(); 


     } 
    } // fin async 
} 

Я попытался это заменить вызов на AsyncTask:

runOnUiThread(new Runnable() { 

       public void run() { 
        QueryForDateTask task = new QueryForDateTask(); 
        task.execute(DateActivity.this.mProgressDialog, DateActivity.this, DateActivity.this.getApplicationContext()); 
       } 
      }); 

(как объяснено в Asynctask causes exception 'Can't create handler inside thread that has not called Looper.prepare()' насколько я понял), но результат точно так же.

Так что я не могу понять, почему он не работает в этом мероприятии, несмотря на все, что хорошо для других проектов.

Любой ключ?

Спасибо большое за все идеи :)

+0

Пожалуйста, разместите всю трассировку стека и укажите, какая строка в вашем коде является «верхней строкой». – CommonsWare

+0

вам не нужно 'runOnUiThread', если ваша асинтеза вызывается в потоке ui. – Raghunandan

+0

@ Raghunandan: это тоже показалось странным, но я попробовал –

ответ

0

Просто пост, чтобы отметить проблемы, как решить:

адаптер я использовал, был багги в параметрах синтаксического анализа и бросили в NullPointerException. Я только что исправил это, AsyncTask теперь работает без проблем.

Смежные вопросы

 Смежные вопросы