您的位置:首页 > 理论基础 > 计算机网络

Android上实现一个简单的天气预报APP(三) 获取网络数据

2017-02-25 11:36 1066 查看
学习参考资源:https://www.gitbook.com/book/zhangqx/mini-weather/details

前面我们已经配置好了界面布局,显示布局上的数据都是我们胡乱加载的,接下里我们要将这些数据更新为网络上的真实数据

1)检查网络连接状态

1.新建一个java类CheckNet

我们使用ConnectManager类的getSystemService方法,获取网络连接状态值

package com.example.xchen.mweather;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
* Created by xchen on 16/12/17.
*/

public class CheckNet {
public final static int NET_NONE = 0;
public final static int NET_WIFI = 1;
public final static int NET_MOBILE = 2;
public static int getNetState(Context context)
{

ConnectivityManager connectivityManager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo == null)
return NET_NONE;
int type = networkInfo.getType();
if(type == ConnectivityManager.TYPE_MOBILE)
return NET_MOBILE;
else if(type == ConnectivityManager.TYPE_WIFI)
return NET_WIFI;
return NET_MOBILE;
}
}


2.在MainActivity中使用这个类,判断网络状态



3.在manifest中,打开查看网络状态权限



运行一下!



2)获取网络上的数据

现有一个天气预报发布网站:http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100(后面的101010100是城市代码),这个网站上实时更新天气信息,页面如下:



接下来我们要将这个网页上的数据获取下来。

1.借助HttpUrlConnection(java.net.HttpUrlConnection),获取Url网页上的数据。

新建一个函数名为getWeatherDatafromNet(String),如下

private void getWeatherDatafromNet(String cityCode)
{
final String address = "http://wthrcdn.etouch.cn/WeatherApi?citykey="+cityCode;
Log.d("Address:",address);
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection urlConnection = null;
try {
URL url = new URL(address);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(8000);
urlConnection.setReadTimeout(8000);
InputStream in = urlConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuffer sb = new StringBuffer();
String str;
while((str=reader.readLine())!=null)
{
sb.append(str);
Log.d("date from url",str);
}
String response = sb.toString();
Log.d("response",response);
}catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
}

2.在MainActivity的onCreate方法中调用该方法



3.在Manifest中打开Internet访问权限



运行一下!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐