1. 程式人生 > >Android上實現一個簡單的天氣預報APP(三) 獲取網路資料

Android上實現一個簡單的天氣預報APP(三) 獲取網路資料

學習參考資源: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)獲取網路上的資料


接下來我們要將這個網頁上的資料獲取下來。

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訪問許可權


執行一下!