2 qq 27278679 qq_27278679 于 2016.05.02 14:17 提问

Android中用线程访问网络之后得到的数据怎么在其他函数(非UI)中使用?

只贴出了一部分代码,稍微解释一下,即在类中的onCreateView函数中开了一个线程,用来访问网络爬数据,然后生成了5个list,现在想要在getDateFromURL方法中使用这几个list,如何实现?
尝试了使用handler给全局变量赋值,但是getDateFromURL方法中的list都为空,
本人菜鸟,刚学一个月,很多东西都是跌跌撞撞摸索的,求大神指点啊。这地方卡了好久了。目前能想到的思路就两个:1,通过全局变量过度;2,通过数据库来过渡。第二个还没尝试,不知道是否可行。

public class DeckviewFragment extends Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mDefaultThumbnail = BitmapFactory.decodeResource(getResources(),
R.drawable.default_thumbnail);
mDefaultHeaderIcon = getResources().getDrawable(R.drawable.banana);
view1 = inflater.inflate(R.layout.deckview, container, false);
mDeckView = (DeckView) view1.findViewById(R.id.deckview);
count = (TextView) mDeckView.findViewById(R.id.count_num);
comment = (TextView) mDeckView.findViewById(R.id.comment_num);

    new Thread(networkTask).start();
            ........
            }

            Runnable networkTask=new Runnable() {
                @Override
                public void run() {
                        try {
                                StringBuffer buffer=new StringBuffer();
                                ArrayList<String> mcountlist=new ArrayList<String>();
                                ArrayList<String> mcomlist=new ArrayList<String>();
                                ArrayList<String> mtitlelist=new ArrayList<String >();
                                ArrayList<String> mpiclist=new ArrayList<String>();
                                ArrayList<String> mhreflist=new ArrayList<String >();

            Document doc = Jsoup.connect("http://www.-------").get();
            Elements elements = doc.getElementsByClass("mainer");
            for (Element e:elements){
                Elements counts=e.getElementsByClass("title");//
                if(counts.size()!=3){
                    for (Element count : counts) {
                        buffer.append(count.toString());
                        mhreflist.add(count.attr("href"));
                    }
                }
                Elements pics =e.getElementsByClass("preview");
                for(Element pic:pics){
                    mpiclist.add(pic.attr("src"));
                }
            }
            Pattern p1=Pattern.compile("点击数\\:\\s(.*?)\\s\\/");
            Matcher m1=p1.matcher(buffer);
            while (m1.find()){
                mcountlist.add(m1.group(1));//group(1)去掉了:和/
            }
            Pattern p2=Pattern.compile("评论数\\:\\s(.*?)\"");
            Matcher m2=p2.matcher(buffer);
            while (m2.find()){
                mcomlist.add(m2.group(1));
            }
            Pattern p3=Pattern.compile("标题\\:\\s(.*?)\\r");
            Matcher m3=p3.matcher(buffer);
            while (m3.find()){
                mtitlelist.add(m3.group(1));
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
};
    void getDateFromURL(Integer num,Integer key) {
    if (mEntries == null) {
            mEntries = new ArrayList<>();
            for (int i=0; i < num; i++) {
                Datum datum = new Datum();
                datum.count_num=mcountlist.get(i);
                datum.comment_num=mcomlist.get(i);
                datum.headerTitle =mtitlelist.get(i);
                datum.link =mpiclist.get(i);
                mEntries.add(datum);
            }
        }
                }

3个回答

bdmh
bdmh   Ds   Rxr 2016.05.02 14:36

异步中的数据可以通过handler传递给ui线程处理

qq_27278679
qq_27278679 我这里只是一个类啊,传到那个UI线程处理?
一年多之前 回复
baidu_23086307
baidu_23086307   2016.05.02 23:03

通过线程池,然后通过message发消息,

baidu_23086307
baidu_23086307   2016.05.02 23:04

楼主还没没有理解多线程的核心呀!建议多去看看线程的知识,同步,异步等

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!