AndroidSDK——和風天氣使用初體驗


 

最近做的項目涉及到獲取當地的天氣狀態等信息,偶然發現和風天氣這個很好用,所以打算分享一下。


 

官方文檔:https://dev.heweather.com/docs/sdk/android

首先進行注冊

並在控制台創建應用獲取username,key 后續使用

 

下載

和風天氣SDK的jar包,並集成到Android項目中

jar包:https://a.hecdn.net/download/api_sdk/HeWeather_Public_Android_V3.3.jar

(可以進入官方網站獲取最新版的jar包

集成步驟:(下圖展示

  1. 找到AndroidStudio的Project目錄下的app路徑的libs文件夾中,將jar包粘貼到該路徑。
  2. 右擊jar包,點擊[Add As Library] 進行集成
  3. 集成成功后,Build狀態欄顯示正常
  4. 點擊build.gradle文件中可以看到相關代碼

添加依賴

同時在build.gradle文件的dependencies獲取okhttp和gson的依賴

okhttp和gson是我們的old friends了,可見和風天氣是利用okhttp進行網絡訪問同時將天氣數據結果用gson的形式傳輸。

1 //引入okhttp和gson
2     implementation 'com.squareup.okhttp3:okhttp:3.9.0'
3     implementation 'com.google.code.gson:gson:2.6.2'

添加權限

集成成功后在AndroidManifest.xml文件添加相關權限

 1 <!--必選Internet網絡-->
 2     <uses-permission android:name="android.permission.INTERNET"/>
 3     <!-- 這個權限用於進行網絡定位-->
 4     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 5     <!-- 這個權限用於訪問GPS定位-->
 6     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 7     <!-- 獲取運營商信息,用於支持提供運營商信息相關的接口-->
 8     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 9     <!-- 用於讀取手機當前的狀態-->
10     <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
11     <!--wifi狀態-->
12     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
13     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
14     <!--讀取設置 喚醒屏幕-->
15     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
16     <uses-permission android:name="android.permission.WAKE_LOCK"/>

獲取相應權限后,我們即可通過代碼獲取地方天氣數據

 在MainActivity.java的oncreate方法中,先進行天氣環境初始化(在主線程中

init參數為第一步注冊並獲取的username和key,注意:應用定義包名必須和項目的包名一致

1 //和風天氣init 初始化
2         /*
3         *參數:
4         * s:Username
5         * s1:Key
6         * */
7         HeConfig.init("HE2005212341181595","f4cbb7844d664d12b8f4149ea875ad57");
8         //轉換為免費模式
9         HeConfig.switchToFreeServerNode();

在主線程進行動態權限申請

REQUEST_GSP為自定義私有常量

private final int REQUEST_GPS = 1;
1 //動態申請GPS權限
2         ActivityCompat.requestPermissions(this,
3                 new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_GPS);

在動態申請的方法回調中進行weather方法調用

 1 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 2         if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 3             Toast.makeText(MainActivity.this, "Permission GET", Toast.LENGTH_SHORT).show();
 4             if(requestCode==REQUEST_GPS){
 5                 getWeather();
 6             }
 7 
 8         } else {
 9             Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
10         }
11 
12         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
13 
14     }

定義getWeather()方法

 1 public void getWeather() {
 2         HeWeather.getWeatherNow(MainActivity.this, Lang.CHINESE_SIMPLIFIED, Unit.METRIC, new HeWeather.OnResultWeatherNowBeanListener() {
 3             public static final String TAG = "he_feng_now";
 4 
 5             @Override
 6             public void onError(Throwable e) {
 7                 Log.e(TAG, "onError: ", e);
 8                 System.out.println("Weather Now Error:" + new Gson());
 9             }
10 
11             @Override
12             public void onSuccess(Now dataObject) {
13                 Log.e(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));
14                 String jsonData = new Gson().toJson(dataObject);
15                 String tianqi = null, wendu = null, tianqicode = null;
16                 if (dataObject.getStatus().equals("ok")) {
17                     String JsonNow = new Gson().toJson(dataObject.getNow());
18                     JSONObject jsonObject = null;
19                     try {
20                         jsonObject = new JSONObject(JsonNow);
21                         tianqi = jsonObject.getString("cond_txt");
22                         Log.e("tinaqi", tianqi);
23                         wendu = jsonObject.getString("tmp");
24                         Log.e("wendu", wendu);
25                     } catch (JSONException e) {
26                         e.printStackTrace();
27                     }
28                 } else {
29                     Toast.makeText(MainActivity.this, "有錯誤", Toast.LENGTH_SHORT).show();
30                     return;
31                 }
32 
33             }
34         });
35 
36     }

結果

最后運行APP,可以在Log中看到相關信息。

通過獲取到的gson字符串,我們可以通過json的getString獲取相關數據信息。如天氣或者溫度等;

tianqi = jsonObject.getString("cond_txt");

當然一些其他的信息我看也可以創建實體類,進行gson字符串的反序列化;

最后通過這些數據進行項目的各種可行性功能操作即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM