android4.0后不能在住线程中使用网络连接。于是我新开了一个线程,可是还是有错误。 你这个代码错误不是一点点。先贴exception吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Console里并没有打印任何Exception就崩溃了,LogCat如下 日志里的错误不是很清楚嘛,是MainActivity的34行有问题 MainActivity的34行就是调用这个函数的downLoad()方法 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(){ 我的代码是运行到一楼贴出来的代码的第22行崩溃的,上面的Log.d还可以输出 我另外一个贴子里的回复 :你概念上搞错了一点:既然在线程里执行了,那你返回的时候download Result就是空的,因此,你这个时候返回就没有意义了,后面再对这个download result处理就是错误的。你handler里面的代码,才是真正应该处理downloadResult的地方,比如更新UI之类的,而不是单纯的一个赋值操作。 你要搞清楚代码的顺序和代码执行的顺序。你这个函数肯定是返回了null 可是调试的时候根本执行不到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是类的私有成员啊,难道不能够在主线程里赋值吗? 应该是像6楼说的,把new handler()放在前面吧?因为没有handler对象就没法发送消息啊 感谢skgary!他说的很对。我确实对线程理解的不够。 虽然android 不是纯的java 虚拟机,但语言的基本概念上是完全一致的。建议你找本java的书看看,仔细理解一下线程是如何如何执行的,然后再来看android对于一些线程使用上的限制,以及API上对线程上的建议方式,如AsyncTask等等。 android如何访问HID设备 myeclipse 9.0 下 ADT的安装。 菜鸟关于安卓的一些疑问 哪有 ndk 开发比较好的教程啊? Collections.sort排序结果怎么不对,? 如何让 安卓设备 通过数据线 连接USB设备实现数据互通 新手跪求大神过来看看,标题要长啊!!!!!!!!!!!!! eclipse 编写Android程序时,在menu添加菜单节点没有“Item”之类的选项 请教微信朋友圈拍照功能怎么实现 android无法创建文件 新人求助:关于listview 使用SimpleCursorAdapter问题 新人求助,关于ViewPager里图片点击事件的问题
@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(){
你要搞清楚代码的顺序和代码执行的顺序。你这个函数肯定是返回了null
bfr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Log.d("mmm", "----------2.1");这三行只能打印第一个Log.d,不能打印第二个Log.d,而且downloadResult是类的私有成员啊,难道不能够在主线程里赋值吗?
建议你找本java的书看看,仔细理解一下线程是如何如何执行的,然后再来看android对于一些线程使用上的限制,以及API上对线程上的建议方式,如AsyncTask等等。