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个回答

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android UI线程和非UI线程
Android UI线程和非UI线程
Android学习笔记:更新UI的方法(UI线程和非UI线程)
一、UI线程以及Android的单线程模型原则 当应用启动时,系统会创建一个主线程(Main Thread)。这个主线程负责向UI组件分发事件(包括绘制事件),在这个主线程里,应用和Android的UI组件发生交互。所以Main Thread也叫UI Thread也即UI线程。 系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出...
Android在非UI线程中显示Toast
韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Android在非UI线程中显示Toast
android 非UI线程更新UI
Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) Looper的方式。 使用Handler的方式。 // 1. 使用runOnUiThread的方式 runOnUiThread(new Runnable() { @Override public voi...
Android线程---UI线程和非UI线程之间通信
当主线程sendMessage后,子线程便会调用handleMessage来获取你所发送的Message。我的主线程向子线程发送消息时携带了数据,子线程根据主线程发送来的数据进行数据库查询,并将查询后的结果返回给该主线程:     1  public class UpdataPeople extends Activity {   2    3     EditText updata_na
在非UI线程使用Handler
在非UI线程使用Handler进行线程通信时,一般都需要进行3个步骤: 创建Looper Looper.prepare() (创建了一个Looper和MessageQueue) 创建Handler Handler 启动消息循环 Looper.loop() 如果你不带参数实例化:Handler handler=new Handler();那么这个会默认绑定当前线程的Looper。 一...
android中线程的开启,访问网络
方式1 new Thread(runnableDjangoRegister).start();//注册 public Runnable runnableDjangoRegister = new Runnable() { @Override public void run() { Log.e("runnableD
非UI线程中Toast
因为在做项目时候,偶遇需要Toast,但是并非在Activity或者Service中(两者都可直接Toast),所以搜集一些别人的方法,在此记录以备后续只用!        第一种是在大神博客中找到,原文链接:http://blog.csdn.net/xiaanming/article/details/8904645 他是写了一个Utils,写了一个show的函数,我想不需多做解释,可以看看
Android在所有代码中使用Toast,包括非UI线程
<application android:name="base.Global" android:allowBackup="true" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@strin
Android非UI线程中更新UI界面
“好记性不如烂笔头”,明明刚用完不久的知识很容易又忘记了,感觉自己有必要通过博客把工作一年以来遇到的典型问题记录,就从Android工作线程更新UI界面引起的crash说起吧。 项目中的Gallery在显示照片详细信息中使用了Google Map来标记照片的拍摄地点,测试工程师反馈了一个严重的bug,点击照片中的详细信息查看地图上照片拍摄地点,如果旋转屏幕,Gallery有时会崩溃。查找了一下cr
非UI线程更新UI!?
Android中非UI线程也可以更新UI,记录一次完整的探查过程!
非UI线程访问UI线程
客户端UI线程和非UI线程,怎么样把数据通过非UI线程显示在UI的控件上?
UI线程和非UI线程的交互方式
Android的UI线程负责处理用户的按键事件、触摸事件及屏幕绘制等,在UI线程中不可以有耗时操作阻塞事件的响应,这样会导致界面变得不流畅,甚至会出现没有响应的情况,这就是所谓的ANR(Application Not Responding)。一般应该把像读写文件、请求网络这类的耗时操作放在子线程中去执行,这样可以避免UI线程的响应事件过慢,但是很多情况下在子线程中需要更新界面,比如从网络中获取到图片
android ui线程和数据的分离
       android会启动一个主线程(MainThread),主线程负责处理和ui相关的事件,因此主线程通常又叫UI线程。而由于Android采用UI单线程模型,所以只能在主线程中对UI元素进行操作。由于主线程是单线程模型,对于一些费时的操作,不能放在主线程中处理,要开一个多线程来处理这些费时的操作如请求服务器更新数据。在我们项目中一般采用Thread+Handler的方式进行非界面的数...
Android 访问网络并且更改UI
开始的时候,我以为可以直接在主线程里面进行网络的访问,后来发现,在Android4.0之后就不支持这种方法了。所以就要创建一个新的线程去解决这个问题。但是子线程中,又存在着不能够更改UI的限制。那么这个怎么办呢?通过查询博客,可以采取以下的方式:handler去处理消息并且更改UI,线程进行访问网络,将获得的数据传送给handler进行处理,handler接收到消息之后,用sendMessage函...
Android 在其他线程中更新UI线程的解决方法
1 用Activity对象的runOnUiThread方法更新new Thread() { public void run() { //这儿是耗时操作,完成之后更新UI; runOnUiThread(new Runnable(){ @Override public void run() {
android怎么限制其他程序访问网络。
求教[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/49.gif][/img]
非UI线程怎么安全访问界面控件?
在方法异步调用里要访问界面控件,为了程序的安全性能该怎么做?
非ui线程,怎么接受 HWND_BROADCAST 消息?
我在 线程中 通过 GetMessage(&msg, NULL, 0, 0)rn没法接受到 HWND_BROADCAST 类型消息?rnrn
android访问网络,单独开启线程
问题描述:在模拟器上Android应用成功访问本地局域网网络,所有功能正常,于是换到真机上测试结果只能登录成功,后续的操作都是失败的。起初怀疑是否是登录cookie的问题,但是在模拟机上都可以说明不是cookie的问题,真机浏览器可以访问局域网应用。最后想到登录是new了线程的,登录没有问题,但是后面执行网络访问无论如何都访问不到数据,就是因为没有开启新的线程。 问题原因:Android在与服务...
Android中的UI线程详解
本文主要讲述了什么是UI线程,为什么会出现ANR,为什么不能在UI线程之外更新UI,以及如何在在线程中更新UI。
Android: 更新线程中的UI
我使用以下代码更新一个seekbar。问题是每当seekBar.setProgress()被调用时,UI上其它元素就被冻结。因此我想用另外一个线程在主线程中来更新 seekBar。rnrn private Handler mHandler = new Handler() rn @Overridern public void handleMessage(Message msg) rn try rn int pos;rn switch (msg.what) rn case SHOW_PROGRESS:rn pos = setProgress();rn if (!mDragging && mBoundService.isPlaying()) rn msg = obtainMessage(SHOW_PROGRESS);rn sendMessageDelayed(msg, 100 - (pos % 1000));rn rn break;rn rn catch (Exception e) rn rn rn rn ;rn rn private int setProgress() rn if (mBoundService == null || mDragging) rn return 0;rn rn int position = mBoundService.getCurrentPosition();rn int duration = mBoundService.getDuration();rn if (sliderSeekBar != null) rn if (duration > 0) rn // use long to avoid overflowrn long pos = 1000L * position / duration;rn sliderSeekBar.setProgress((int) pos);rn rn rn rn if (sliderTimerStop != null)rn sliderTimerStop.setText(stringForTime(duration));rn if (sliderTimerStart != null)rn sliderTimerStart.setText(stringForTime(position));rn rn return position;rn rnrn我不明白为什么会出现这样的问题,如何进行?rn
Android 线程中更新UI
安卓在线程中更新UI的方法就是发消息到主线程 private Thread mThread; public void runThread() { mThread = new Thread(runnable); mThread.start();//线程启动 } Runnable runnable = new Runnable() { @Override public
非UI现场数据计算更新UI线程
目前做法,非UI线程进行数据计算,计算的数据显示到UI线程上,rn问题:非UI线程thread2整个运行一圈需要55~63秒rn[code=csharp]rn //线程rn thread2 = new Thread(new ThreadStart(UpdateForm));rn thread2.IsBackground = true;rn thread2.Start();rn //线程方法rn public void UpdateForm()rn rn while (tj2)rn rn ...rn if (mycom1.IsOpen)rn rn .....rn MyClass.ThreadUI.SetTxt(TXTValue1, "-" + num.ToString(), this);rn rn ....rn rn rn[/code]rn如果把thread2线程内计算方法分出来一部分,多个非UI线程对一个UI线程,就会报异常,我的理解是多个对UI线程进行操作照成的异常?有没有合理的方法?rnSystem.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。rn 在 System.Windows.Forms.UnsafeNativeMethods.SetWindowLongPtr32(HandleRef hWnd, Int32 nIndex, WndProc wndproc)rn 在 System.Windows.Forms.UnsafeNativeMethods.SetWindowLong(HandleRef hWnd, Int32 nIndex, WndProc wndproc)rn 在 System.Windows.Forms.NativeWindow.AssignHandle(IntPtr handle, Boolean assignUniqueID)rn 在 System.Windows.Forms.NativeWindow.AssignHandle(IntPtr handle)rn 在 System.Windows.Forms.NativeWindow.WindowClass.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)rn 在 System.Windows.Forms.UnsafeNativeMethods.IntCreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)rn 在 System.Windows.Forms.UnsafeNativeMethods.CreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)rn 在 System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)rn 在 System.Windows.Forms.Control.CreateHandle()rn 在 System.Windows.Forms.Control.RecreateHandleCore()rn 在 System.Windows.Forms.PictureBox.set_BorderStyle(BorderStyle value)rn 在 BoteDynamo.BoteThreadUI.SetBorderStyle[TObject](TObject objCtrl, BorderStyle style, Dynamo winf)rn 在 BoteDynamo.Dynamo.pic_MouseLeave(Object sender, EventArgs e)rn 在 System.Windows.Forms.Control.OnMouseLeave(EventArgs e)rn 在 System.Windows.Forms.Control.WmMouseLeave(Message& m)rn 在 System.Windows.Forms.Control.WndProc(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)rn 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) rnSystem.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。rn 在 System.Windows.Forms.UnsafeNativeMethods.SetWindowLongPtr32(HandleRef hWnd, Int32 nIndex, WndProc wndproc)rn 在 System.Windows.Forms.UnsafeNativeMethods.SetWindowLong(HandleRef hWnd, Int32 nIndex, WndProc wndproc)rn 在 System.Windows.Forms.NativeWindow.AssignHandle(IntPtr handle, Boolean assignUniqueID)rn 在 System.Windows.Forms.NativeWindow.AssignHandle(IntPtr handle)rn 在 System.Windows.Forms.NativeWindow.WindowClass.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)rn 在 System.Windows.Forms.UnsafeNativeMethods.IntCreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)rn 在 System.Windows.Forms.UnsafeNativeMethods.CreateWindowEx(Int32 dwExStyle, String lpszClassName, String lpszWindowName, Int32 style, Int32 x, Int32 y, Int32 width, Int32 height, HandleRef hWndParent, HandleRef hMenu, HandleRef hInst, Object pvParam)rn 在 System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)rn 在 System.Windows.Forms.Control.CreateHandle()rn 在 System.Windows.Forms.Control.RecreateHandleCore()rn 在 System.Windows.Forms.PictureBox.set_BorderStyle(BorderStyle value)rn 在 ThreadUI.SetBorderStyle[TObject](TObject objCtrl, BorderStyle style, Dynamo winf)rn 在 Dynamo.pic_MouseLeave(Object sender, EventArgs e)rn 在 System.Windows.Forms.Control.OnMouseLeave(EventArgs e)rn 在 System.Windows.Forms.Control.WmMouseLeave(Message& m)rn 在 System.Windows.Forms.Control.WndProc(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)rn 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) rn
Android 非UI线程是否可以更新UI
正常思考,一般来说,Android中的UI更新是在主线程(UI线程)中,在非UI线程中是不可以进行更新的。 原因是这个主线程负责向UI组件分发事件(包括绘制事件),你的应用和Android的UI组件(components from the Android UI toolkit (components from the android.widget and android.view packages
应用层枚举线程,怎么得到线程函数?
THREADENTRY32里面没有函数开始地址rn应用层好像只有创建线程快照一个办法枚举线程了
android UI线程中启动opengl线程
android 的ui线程中直接调用cocos语法进行绘制会出现黑色方块等情况,需在调用cocos绘制的地方通过下列方法调用opengl线程 Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() { @Override public void run() { ShareHelper.showNoWxDlg(); } }); ...
非UI线程可不可以更新UI(二)
上篇文章提到因为ViewRootImpl会在线程更新UI时检查当前线程是不是创建它的线程,子线程可以在ViewRootImpl未创建的时候尽行更新UI。下面我们来看另外一种可以在子线程更新UI的办法。既然ViewRootImpl的checkThread方法只会检查当前更新UI的线程是不是创建它的线程。那么可不可以在子线程中构建自己的ViewRootImpl。
非UI线程修改UI的问题
我在一个UI界面中有一个Table和三个按钮(一个开始、一个暂停、一个停止)rnrn在listener中的线程修改table时出现rnException in thread "Timer-0" org.eclipse.swt.SWTException: Invalid thread accessrnrnrn因为我窗体分了很多块,由多个Composite组成。每个Composite都是一个自定义类。。。。没有display设置异步的线程。。怎么异步改动tablernrn三个按钮是控制进程的。。。进程的工作是不断从数据库获得新数据添加到SWT的table中rnrn
非UI线程可不可以更新UI(一)
子线程中不可以更新UI,这是好多Android开发者都这么认为的。Android官方这样描述the Android UI toolkit is not thread-safe and must always be manipulated on the UI thread。那么非UI线程到底能不能更新UI?请看下面一段代码: public class MainActivity extends Ac
Xamarin.Android 非UI线程更新UI
Xamarin.Android 非UI线程更新UI
怎么查看哪些线程在访问网络?
tcpview只能查到进程
Qt-非UI线程与UI线程通信
利用槽函数,在非UI线程发送信号,UI线程进行接收。 线程类 #pragma once #include &amp;lt;qthread.h&amp;gt; class TThread : public QThread { Q_OBJECT public: TThread(); ~TThread(); signals: void sendValue(int i); public: virtual vo...
关于在非UI线程中修改View
关于在非UI线程中修改View 可以使用 View.post(new Runnable() { @Override public void run() { // TODO 自动生成的方法存根 flashUI(time); } }); 操作,所需要的做的UI操作都凡在run方...
Android使用Http访问网络
Android6.0(API23)系统之后,Android上发送HTTP请求的方式只有一种HttpUrlConnection 基本用法:通过一个执行路径的URL,获取到HttpUrlConnection对象,然后就可以获取到服务器端的二进制数据,最后将二进制数据转为可以阅读的的数据。 public class HttpUrlConnectionActivity extends AppCom
在非UI线程中显示Toast
Toast的显示依赖于当前线程中的Handler,而Handler的创建必须有Looper,在UI线程中,系统自动为我们创建了Looper对象。因而在子线程中,我们必须手动的去创建Looper对象。子线程中创建Looper: Looper.prepare( ); 创建Looper Looper.loop( ); 实现消息循环 package com.android.toastdemo;imp
非UI线程的线程池的封装
非UI线程的线程池的封装Android中很多操作都不能在Ui线程中进行,数据库读写,访问网络等等。AsyncTask正是为了解决这个问题,但是,AsyncTask有一个问题是所有的AsyncTask的操作只能顺序执行, AsyncTaskB必须要等到AsyncTaskA执行完毕后,才能执行。貌似是从Sdk的某个版本之后才开始这样,没有具体考证。 AsyncTask内部维护一个Runnable的队
Android使用OkHttp访问网络
相比于Android原生的HttpURLConnection,OkHttp库有过之而无不及,在使用OkHttp之前,需要先在项目中添加OkHttp库的依赖,在app/build.gradle文件内的dependencies闭包中添加:compile'com.squareup.okhttp3:okhttp:3.4.1'即可。 OkHttp的使用方法 1.创建OkHTTPClient实例 Ok...
UI控件在线程中的使用
UI控件在线程中的使用 (一) 直接设置属性的线程非安全性 在 posted @ 2018-06-30 19:54 李华丽 阅读(...) 评论(...) 编辑 收藏 ...
Android快速的在其他线程中进行UI操作
//创建UI线程在UI中操作 WelcomeActivity.this.runOnUiThread(new Runnable() { @Override public void run() {
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数

相似问题

2
java中用的数据库是access插入数据
2
在android中用jdbc连接数据库出现的问题,求大神帮忙?
1
asp.net中用gridview怎么实现将选中行的数据添加到数据库中数据库用的是SQLServer
2
用response.addcookie存的cookie能不能在HTML中用
3
android 5.0以上移动数据的开启关闭
3
在jsp中用rs.next()循环打印数据库的数据后,怎么重头再打印一遍呢?
2
VB中用什么方式可以存储实时增加的数据,并且需要对数据排序,用数据库我试过速度太慢了
1
怎么在vb中用语句来实现对数据的扫描全表的操作,结果怎么变成hash索引?
1
dat文件怎么在vb中用语句拆分成可以索引的小块文件,不破坏文件的内容
1
wdf驱动中用MmAllocateContiguousMemory申请的空间如何在应用程序中访问
5
数据库中某列为varchar(255),在java中用String变量,怎么限制其小于255个字符
1
在一个线程中用jdbc查询数据库,但是查出来的结果和期望结果不同
5
如何在java中用if判断edittext获取到数据
0
小白求教numpy中用bool选取数据的问题
5
Android开发中用POI包读取2007版Excel文档的问题
1
android 怎么加载3d模型 .DAE文件 或者。max也行
2
android中用fragment 替换 布局中的LinearLayout,然后如何换回来???
2
C#中用OpenFileDialog打开数据库中的其中一张表
1
关于MFC多线程,怎么实现?
2
android中用openGl画立方体,旋转几次之后就不知道哪个面是哪个面了