你这个代码错误不是一点点。先贴exception吧

解决方案 »

  1.   

    Console里并没有打印任何Exception就崩溃了,LogCat如下
      

  2.   

    日志里的错误不是很清楚嘛,是MainActivity的34行有问题
      

  3.   

    MainActivity的34行就是调用这个函数的downLoad()方法
      

  4.   

    handler = new Handler(){
                        @Override
                        public void handleMessage(Message msg) {
                            Log.d("mmm","11111111111111111111");
                            downloadResult = (String)msg.obj;
                        }
                         
                    }; 
    放前面去
    //MyThread t = new MyThread(urlStr);
                //t.start();
                  handler = new Handler(){
                        @Override
                        public void handleMessage(Message msg) {
                            Log.d("mmm","11111111111111111111");
                            downloadResult = (String)msg.obj;
                        }
                         
                    }; 
                 
                new Thread(){
      

  5.   

    我的代码是运行到一楼贴出来的代码的第22行崩溃的,上面的Log.d还可以输出
      

  6.   

    我另外一个贴子里的回复 :你概念上搞错了一点:既然在线程里执行了,那你返回的时候download Result就是空的,因此,你这个时候返回就没有意义了,后面再对这个download result处理就是错误的。你handler里面的代码,才是真正应该处理downloadResult的地方,比如更新UI之类的,而不是单纯的一个赋值操作。
      

  7.   


    你要搞清楚代码的顺序和代码执行的顺序。你这个函数肯定是返回了null
      

  8.   

    可是调试的时候根本执行不到handler里的代码啊。Log.d("mmm","0.9-----"+conn.toString());
                            bfr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                            Log.d("mmm", "----------2.1");这三行只能打印第一个Log.d,不能打印第二个Log.d,而且downloadResult是类的私有成员啊,难道不能够在主线程里赋值吗?
      

  9.   

    应该是像6楼说的,把new handler()放在前面吧?因为没有handler对象就没法发送消息啊
      

  10.   

    感谢skgary!他说的很对。我确实对线程理解的不够。
      

  11.   

    虽然android 不是纯的java 虚拟机,但语言的基本概念上是完全一致的。
    建议你找本java的书看看,仔细理解一下线程是如何如何执行的,然后再来看android对于一些线程使用上的限制,以及API上对线程上的建议方式,如AsyncTask等等。