Android:在线程中解析查询

时间:2014-08-04 11:11:37

标签: android multithreading wait main synchronized

我正在使用Parse库查询来自DB的一些记录,这些记录将在带有自定义适配器的ListView中显示。我有一张记录表,每条记录都应该从其他表中进行计数查询。

这是检索的每个对象的计数查询的线程:

getVisualizations = new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < events.size(); i++) {
                ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseConstant.PT_VISUALIZ);
                query.whereEqualTo(ParseConstant.PT_VISUALIZ_EVENTO, events.get(i));

                events.get(i).setVisualizations(query.count());
            }
        }
    });
  

events是一个Object ArrayList

这是主要的代码

ParseQuery<ParseObject> query = ParseQuery.getQuery(ParseConstant.PT_EVENT);
    query.setLimit(30);
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> resultList, ParseException e) {
            if (e == null) {

                events = new ArrayList<Event>();

                for (int i = 0; i < resultList.size(); i++) {
                    Event event = (Event) resultList.get(i);

                    events.add(event);
                }

                if (!getVisualizations.isAlive()) {

                    getVisualizations.start();

                }

                if (adapter != null) {
                    adapter.notifyDataSetChanged();
                } else {
                    adapter = new AdapterEvent(getActivity(), R.layout.list_event, events, list);
                    AnimationAdapter animAdapter = new SwingBottomInAnimationAdapter(adapter);
                    animAdapter.setAbsListView(list);
                    list.setAdapter(animAdapter);
                }

                loadingBar.setVisibility(View.INVISIBLE);

            } else {
                Log.d("score", "Error: " + e.getMessage());
            }
        }
    });

问题是线程启动后,我不知道如何阻塞主线程,直到另一个线程完成。 (对不起英文:/)

1 个答案:

答案 0 :(得分:0)

也许你应该使用Thread.join() - 如果我们正在处理2个线程,这将阻止一个线程,同时允许另一个线程完成,然后一旦它完成,它将恢复。这是tutorial就可以了