当前位置: 代码迷 >> Android >> 有关从线程返回一个变量值的有关问题
  详细解决方案

有关从线程返回一个变量值的有关问题

热度:19   发布时间:2016-04-28 05:32:10.0
有关从线程返回一个变量值的问题

    我通过以下方法取得远程服务器上一个xml文件。试验时,不用线程就无法访问网络。运行线程,取得xml文件的解析结果,放在parseResult中,parseResult是本页面的类成员变量。下方 if 语句在线程运行结束后,判断parseResult是否为空,不为空则取得其结果。运行时,下方判断语句中的parseResult为空,所以一直返回false。但跟踪执行时,线程中的parseResult是有结果的,不为空。    
    由于对线程不熟悉,不清楚如何在线程运行结束后,把所得到的parseResult,让后面的 if 语句使用。
    请教大家,如何修改以下代码呢?

public boolean isUpdate()   
    {   
         int currentCode = getCode(mContext);
         new Thread()
        {
          public void run()
          {
            try{                   
                     URL url = new URL("http://192.168.1.5/workers.xml");
HttpURLConnection urlConn =(HttpURLConnection)url.openConnection();
urlConn.setConnectTimeout(20* 1000);//设置连接超时
urlConn.setRequestMethod("GET");//以get方式发起请求
int state = urlConn.getResponseCode ();
System.out.println("state="+state);
if (urlConn.getResponseCode() != 200) 
   throw new RuntimeException("请求url失败");
InputStream is=urlConn.getInputStream();//得到网络返回的输入流  

parseResult = readXML(is);//结果是一个list
 urlConn.disconnect();

 } catch (Exception e) {
     e.printStackTrace();
}
          
          }//run
        }.start();//Thread  
        if (parseResult!=null)   
        {   
              float newCode=Float.valueOf(parseResult.get(0).getCode());   
              if (newCode > currentCode)   
            {   
                return true;   
            }   
        }   
        return false;   
    }   

------解决方案--------------------
不是不用线程无法访问,而是UI线程延迟久了会ANR,程序无法运行。
你在自己的线程中执行,可以使用AsyncTask来进行网络操作的,或者说你的结果通过消息发出来。
你这样处理的话肯定是不行的。
关于多线程可以看看这篇文章:http://blog.csdn.net/isming/article/details/25924255

关于网络操作可以看看另一篇:
http://blog.csdn.net/isming/article/details/26399691
------解决方案--------------------
楼主对线程真是一无所知啊,当进行 parseResult 为空判断的时候,线程还没有取得结果哦,要等一会儿的。
线程放在页面上也是存在问题的,主要还是线程如何告知结果,楼主搜索下 handler 的用法吧
  相关解决方案