0

我遇到了一个 android 活动的奇怪问题:我重新使用了我以前运行良好的活动之一,但这次我得到的只是“无法在未调用 Looper.prepare() 的线程内创建处理程序”

我尝试调试,异步任务中的所有内容都运行良好,但是当我到达 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 中解释的那样导致异常“无法在未调用 Looper.prepare() 的线程内创建处理程序”),但结果完全相同。

所以我不明白为什么它在这个活动中不起作用,尽管项目的其他部分都很好。

有什么线索吗?

非常感谢所有的想法:)

4

1 回答 1

0

只是将问题标记为已解决的帖子:

我使用的适配器在解析参数时出错并抛出了 NullPointerException。我刚刚修复它,AsyncTask 现在运行没有问题。

于 2014-10-30T09:56:27.810 回答