android错误之android.os.NetworkOnMainThreadException

在做一个天气预报的widget的时候,参考了一个源代码,但是一直报错,就从里面抠出来获取天气的代码试试看,结果总是报错 就是这个异常,android.os.NetworkOnMainThreadException代码是这样的:MainActivity:public class MainActivity extends Activity { MyWeather myWe

大家好,又见面了,我是全栈君。

在做一个天气预报的widget的时候,参考了一个源代码,但是一直报错,就从里面抠出来获取天气的代码试试看,结果总是报错

 android错误之android.os.NetworkOnMainThreadException

就是这个异常,android.os.NetworkOnMainThreadException

代码是这样的:

MainActivity:

public class MainActivity extends Activity {
	
	MyWeather myWeather;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		myWeather = new MyWeather();
		System.out.println(myWeather.getCity());
	}
}

MyWeather:

public class MyWeather {
	public String city;
	public String temp1;
	public String weather1;
	public String img1;
	
	public MyWeather(){
		getWeather();
	}
	
	public void getWeather(){
		
		try {
			URL url = new URL("http://m.weather.com.cn/data/101250101.html");
			InputStream is = url.openStream();
			int len = -1;
			byte[] buffer = new byte[1024];
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			while ((len = is.read(buffer)) != -1) {
				bos.write(buffer, 0, len);
			}
			String info = bos.toString("utf-8");
			JSONObject dataJson = new JSONObject(info);
			JSONObject json = dataJson.getJSONObject("weatherinfo");
			city = json.getString("city");
			temp1 = json.getString("temp1");
			weather1 = json.getString("weather1");
			img1 = json.getString("img1");
			bos.close();
			is.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (JSONException e) {
			// TODO: handle exception
		}
	}
	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getTemp1() {
		return temp1;
	}

	public void setTemp1(String temp1) {
		this.temp1 = temp1;
	}

	public String getWeather1() {
		return weather1;
	}

	public void setWeather1(String weather1) {
		this.weather1 = weather1;
	}

	public String getImg1() {
		return img1;
	}

	public void setImg1(String img1) {
		this.img1 = img1;
	}

}

经过查阅资料,大体错误应该是这样的,主要是说主线程访问网络时出的异常。

 Android在4.0之前的版本 支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。

于是把MainActivity的代码改成如下就可以了,在新开的线程中读取天气,用handler异步加载:

public class MainActivity extends Activity {

	MyWeather myWeather;

	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 0:
				System.out.println("jason.com" + myWeather.getCity());
				break;
			}
		};
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		new Thread() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				super.run();
				myWeather = new MyWeather();
				Message msg = handler.obtainMessage();
				msg.what = 0;
				handler.sendMessage(msg);
			}
		}.start();
	}
}

 

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(转载请说明出处)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121392.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle数据库的拼接字符串,Oracle数据库拼接字符串

    oracle数据库的拼接字符串,Oracle数据库拼接字符串Ora-03113\Ora-03114与OracleIn拼接字符串的问题刚深入接触Oracle不久(大学里以及刚参加工作时学到的Oracle知识只能算是皮毛),因为之前使用SqlServer有将近两年的时间,对SqlServer相对来说很熟悉,比较而言,Oracle真心很…oracle数据库分割字符串返回结果集函数CREATEORREPLACEFUNCTION…

    2022年9月20日
    2
  • Dreamweaver2019版安装教程

    Dreamweaver2019版安装教程dreamweavercc2019新功能:1、CEF更新dreamweavercc2019现已与Chromium嵌入式框架的最新版本进行集成,这样设计人员和开发人员就可以构建与HTML5兼容的网站,并显示Flexbox元素、CSS网格等内容。2、ES6支持全新的EcmaScript6支持包括类、方法、箭头函数、生成器函数的快速输入列表,以及ES6代码的lint…

    2022年10月9日
    2
  • C#简单串口调试助手【傻瓜教程】chanson_chapter01[通俗易懂]

    C#简单串口调试助手【傻瓜教程】chanson_chapter01[通俗易懂]简易串口调试助手制作教程【C#.Winform】chanson_chapter01[说明]:本教程基于win10x64位操作系统,软件环境为MicrosoftVisualStudioCommunity2015(以下简称VS)(新建工程文件)【1】打开VS,[文件]–>[新建]–>[项目],弹出窗体如下:(布局方法)【2】开始布局

    2022年5月10日
    39
  • 有线如何通过笔记本无线共享上网_笔记本插网线怎么共享WiFi

    有线如何通过笔记本无线共享上网_笔记本插网线怎么共享WiFi半年前搬到新住的地方,由于条件限制,房间就一根网线,我跟我老婆两人晚上都需要用到电脑,于是萌生了通过路由器来达到多机器同时上网,不过最后失败。当时没想起大学时代经常干的事情(学校寝室上网要账号,账号都要钱的):通过一台电脑上网,所有其他电脑都通过这台机器上网。半年之后的今天,由于工作实在需要网络,这种条件下,让我想起了曾经的这么一回事,因此我在想,既然能通过有线达到共享网络,无线原理应该一样吧…

    2025年6月3日
    2
  • 数据分析决策树算法_大数据决策树算法

    数据分析决策树算法_大数据决策树算法在2006年12月召开的IEEE数据挖掘国际会议上,与会的各位专家选出了当时的十大数据挖掘算法(top10dataminingalgorithms)。本博客的十大数据挖掘算法系列已经介绍过其中的5个。本文主要介绍决策树中的C4.5,这也是当年位列十大数据挖掘算法之首的经典算法,最后,我们还将演示在Weka(怀卡托智能环境)中进行数据挖掘的实际操作方法

    2022年5月3日
    30
  • sublime Text3配置及快捷键、插件推荐总结

    sublime Text3配置及快捷键、插件推荐总结

    2021年11月29日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号