日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android天气预报实训程序清单,Android天气预报项目

發布時間:2025/3/11 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android天气预报实训程序清单,Android天气预报项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、項目效果圖:

2、主頁面MainActivity代碼如下:

MainActivity.java

package com.qianfeng.weather;

import android.content.Intent;

import android.graphics.drawable.AnimationDrawable;

import android.os.Handler;

import android.os.Message;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

import org.json.JSONObject;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private ImageView refreshIv;

private ImageView searchIv;

private TextView cityTv;

private TextView pmTv;

private TextView errorTv;

private TextView tempTv;

private TextView weatherTv;

private TextView windTv;

private TextView dateTv;

private View lineView;

private LinearLayout otherLl;

private List weekList;

private Handler handler;

private int code = 101100101;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

initData();

getData(code);

setListener();

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 100) {

code = resultCode;

getData(code);

}

}

private void setListener() {

refreshIv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

getData(code);

}

});

searchIv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Intent intent = new Intent(MainActivity.this,

SearchActivity.class);

startActivityForResult(intent, 100);

}

});

}

/**

*

*/

private void initData() {

//? ? ? ? 在Android中借助handler類實現從服務器獲取數據后更新UI頁面(Handler原理)

handler = new Handler() {

@Override

public void handleMessage(Message msg) {

if (msg.what == 200) {

errorTv.setText((String) msg.obj);

}

if (msg.what == 100) {

errorTv.setText("");

//? ? ? ? ? ? ? ? ? ? 停止轉圈動畫

refreshIv.setBackgroundResource(R.mipmap.refresh);

List list = (List) msg.obj;

cityTv.setText(list.get(0).getCity());

pmTv.setText(list.get(0).getPm());

tempTv.setText(list.get(0).getTempCurrent());

weatherTv.setText(list.get(0).getWeather() + " " + list.get(0).getTemp());

windTv.setText(list.get(0).getWindCurrent());

dateTv.setText(list.get(0).getDate_y() + " " + list.get(0).getWeek());

if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("優")) {

lineView.setBackgroundColor(getResources().getColor(R.color.pm1));

} else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("良")) {

lineView.setBackgroundColor(getResources().getColor(R.color.pm2));

} else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("輕度污染")) {

lineView.setBackgroundColor(getResources().getColor(R.color.pm3));

} else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("中度")) {

lineView.setBackgroundColor(getResources().getColor(R.color.pm4));

} else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("重度")) {

lineView.setBackgroundColor(getResources().getColor(R.color.pm5));

} else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("嚴重")) {

lineView.setBackgroundColor(getResources().getColor(R.color.pm6));

}

//? ? ? ? ? ? ? ? ? ? 清空水平滾動條的孫子輩視圖

otherLl.removeAllViews();

//? ? ? ? ? ? ? ? ? ? 將未來五天的天氣信息動態設置到水平滾動條中的線性布局中的子視圖中

for (int i = 1; i < list.size(); i++) {

View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);

TextView weekItemTv = (TextView) view.findViewById(R.id.tv_week_item);

TextView weatherItemTv = (TextView) view.findViewById(R.id.tv_weather_item);

TextView tempItemTv = (TextView) view.findViewById(R.id.tv_temp_item);

weekItemTv.setText(list.get(i).getWeek());

weatherItemTv.setText(list.get(i).getWeather());

tempItemTv.setText(list.get(i).getTemp());

//? ? ? ? ? ? ? ? ? ? ? ? 動態將item視圖添加到otherLl中

otherLl.addView(view);

}

}

}

};

weekList = new ArrayList<>();

weekList.add("星期一");

weekList.add("星期二");

weekList.add("星期三");

weekList.add("星期四");

weekList.add("星期五");

weekList.add("星期六");

weekList.add("星期日");

}

/**

* 北京

*/

private void initView() {

refreshIv = (ImageView) findViewById(R.id.refresh_iv);

searchIv = (ImageView) findViewById(R.id.search_iv);

cityTv = (TextView) findViewById(R.id.city_tv);

pmTv = (TextView) findViewById(R.id.pm_tv);

errorTv = (TextView) findViewById(R.id.error_tv);

tempTv = (TextView) findViewById(R.id.temp_tv);

weatherTv = (TextView) findViewById(R.id.weather_tv);

windTv = (TextView) findViewById(R.id.wind_tv);

dateTv = (TextView) findViewById(R.id.date_tv);

lineView = findViewById(R.id.line_view);

otherLl = (LinearLayout) findViewById(R.id.other_ll);

}

/**

* 獲取網絡數據

*/

private void getData(final int code) {

if (!NetUtils.isActive(MainActivity.this)) {

errorTv.setText("請確認是否有網");

Toast.makeText(MainActivity.this, "親,確認您是否有網!", Toast.LENGTH_LONG).show();

return;

}

refreshIv.setBackgroundResource(R.drawable.pb_bg);

//封裝 繼承? 多態

AnimationDrawable animationDrawable = (AnimationDrawable) refreshIv.getBackground();

animationDrawable.start();

//? ? ? ? 開一個子線程進行網絡請求? 獲取服務器json數據(注意:Android主線程不能操作耗時代碼塊)

new Thread(new Runnable() {

@Override

public void run() {

String uri = "http://weather.123.duba.net/static/weather_info/" + code + ".html";

String result = NetUtils.doGet(uri);

//? ? ? ? ? ? ? ? list集合中存的今天+未來五天的天氣信息

List list = parserJson(result);

Message message = handler.obtainMessage();

//? ? ? ? ? ? ? ? 集合數據為空時讓其檢查網絡問題,或請程序員核查代碼(未徹底優化代碼結構以及代碼性能等)

if (list == null || list.size() == 0) {

message.what = 200;

message.obj = "請檢查網絡";

handler.sendMessage(message);

return;

}

message.what = 100;

message.obj = list;

handler.sendMessage(message);

//? ? ? ? ? ? ? ? 注意:子線程不能更新UI主線程的頁面

//? ? ? ? ? ? ? ? cityTv.setText(list.get(0).getCity());

}

}).start();

}

/**

* 解析json數據

*

* @param result

*/

private List parserJson(String result) {

List list = new ArrayList<>();

try {

JSONObject jsonObject = new JSONObject(result);

JSONObject weatherInfo = jsonObject.getJSONObject("weatherinfo");

//? ? ? ? ? ? 保存今天+未來五天的天氣數據

for (int i = 1; i < 7; i++) {

WeatherBean weatherBean = new WeatherBean();

if (i == 1) {

weatherBean.setCity(weatherInfo.getString("city"));

weatherBean.setCityId(weatherInfo.getString("cityid"));

weatherBean.setDate_y(weatherInfo.getString("date_y"));

weatherBean.setPm("PM:" + weatherInfo.getString("pm") + " " + weatherInfo.getString("pm-level"));

weatherBean.setTempCurrent(weatherInfo.getString("temp") + "°");

weatherBean.setWindCurrent(weatherInfo.getString("wd") + " " + weatherInfo.getString("ws"));

}

weatherBean.setWeek(getWeek(i, weatherInfo.getString("week")));

weatherBean.setTemp(weatherInfo.getString("temp" + i));

weatherBean.setWeather(weatherInfo.getString("weather" + i));

//? ? ? ? ? ? ? ? 將每天的天氣信息保存到集合中

list.add(weatherBean);

}

return list;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/**

* @param i

* @param week

* @return

*/

private String getWeek(int i, String week) {

int index = 0;

for (int j = 0; j < weekList.size(); j++) {

if (weekList.get(j).equals(week)) {

index = j;

break;

//? ? ? ? ? ? ? ? continue;

}

}

if (index + i < 8) {

index = index + i - 1;

} else {

index = index + i - 8;

}

return weekList.get(index);

}

}

NetUtils(網絡工具類):

package com.qianfeng.weather;

import android.content.Context;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

public class NetUtils {

/**

* 監測是否有網

*/

public static boolean isActive(Context context) {

ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo info = manager.getActiveNetworkInfo();

if (info != null) {

return info.isConnected();

}

return false;

}

/**

* 根據傳過來的接口地址,返回服務器吐出來的字符串

*/

public static String doGet(String uri) {

StringBuffer stringBuffer = new StringBuffer();

String result = null;

URLConnection connection = null;

InputStream inputStream = null;

try {

URL url = new URL(uri);

connection = url.openConnection();

connection.setConnectTimeout(10 * 1000);

inputStream = connection.getInputStream();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

String line = bufferedReader.readLine();

while (line != null) {

stringBuffer.append(line);

line = bufferedReader.readLine();

}

result = stringBuffer.substring(stringBuffer.indexOf("(") + 1, stringBuffer.lastIndexOf(")"));

return result;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

}

WeatherBean.java

package com.qianfeng.weather;

public class WeatherBean {

private String city;

private String cityId;

private String week;

private String temp;

private String date_y;

private String wind;

private String weather;

private String pm;

private String tempCurrent;

private String windCurrent;

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getCityId() {

return cityId;

}

public void setCityId(String cityId) {

this.cityId = cityId;

}

public String getWeek() {

return week;

}

public void setWeek(String week) {

this.week = week;

}

public String getTemp() {

return temp;

}

public void setTemp(String temp) {

this.temp = temp;

}

public String getDate_y() {

return date_y;

}

public void setDate_y(String date_y) {

this.date_y = date_y;

}

public String getWind() {

return wind;

}

public void setWind(String wind) {

this.wind = wind;

}

public String getWeather() {

return weather;

}

public void setWeather(String weather) {

this.weather = weather;

}

public String getPm() {

return pm;

}

public void setPm(String pm) {

this.pm = pm;

}

public String getTempCurrent() {

return tempCurrent;

}

public void setTempCurrent(String tempCurrent) {

this.tempCurrent = tempCurrent;

}

public String getWindCurrent() {

return windCurrent;

}

public void setWindCurrent(String windCurrent) {

this.windCurrent = windCurrent;

}

}

3、主頁面XML布局如下:

activity_main.xml:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@mipmap/background">

android:id="@+id/refresh_iv"

android:layout_width="40dp"

android:layout_height="40dp"

android:layout_margin="12dp"

android:background="@mipmap/refresh" />

android:id="@+id/search_iv"

android:layout_width="40dp"

android:layout_height="40dp"

android:layout_alignParentRight="true"

android:layout_margin="12dp"

android:background="@mipmap/search" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginTop="12dp"

android:gravity="center_horizontal"

android:orientation="vertical">

android:id="@+id/city_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#FFF"

android:textSize="28sp" />

android:id="@+id/pm_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#FFF"

android:textSize="20sp" />

android:id="@+id/line_view"

android:layout_width="match_parent"

android:layout_height="10dp"

android:background="#6BCD07" />

android:id="@+id/error_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#F00"

android:textSize="20sp" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_marginLeft="12dp">

android:id="@+id/temp_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="#FFF"

android:textSize="40sp" />

android:id="@+id/weather_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/temp_tv"

android:layout_toRightOf="@+id/temp_tv"

android:textColor="#FFF" />

android:id="@+id/wind_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/temp_tv"

android:textColor="#FFF" />

android:id="@+id/date_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/wind_tv"

android:textColor="#FFF" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true">

android:id="@+id/other_ll"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="#6666"

android:orientation="horizontal">

item.xml(用在Java代碼動態加載后五天天氣信息Item小布局):

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center_horizontal"

android:orientation="vertical"

android:paddingLeft="5dp"

android:paddingRight="5dp">

android:id="@+id/tv_week_item"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="12dp"

android:layout_marginBottom="12dp"

android:text="星期三"

android:textColor="#FFF"

android:textSize="18sp" />

android:id="@+id/tv_weather_item"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="多云"

android:textColor="#FFF"

android:textSize="18sp" />

android:id="@+id/tv_temp_item"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="12dp"

android:layout_marginBottom="12dp"

android:text="20°C~29°C"

android:textColor="#FFF"

android:textSize="16sp" />

4、搜索頁面實現SearchActivity.java,主要包含XML解析,具體代碼如下:

SearchActivity.java

package com.qianfeng.weather;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.EditText;

import android.widget.ImageView;

import java.io.IOException;

import java.io.InputStream;

import java.util.Map;

public class SearchActivity extends AppCompatActivity {

private EditText auto = null;

private Map map = null;

private ImageView iv_search = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_search);

initData();

initView();

}

private void initView() {

auto = (EditText) findViewById(R.id.autoTV);

iv_search = (ImageView) findViewById(R.id.iv_search);

iv_search.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String city = auto.getText().toString().trim();

String codeStr = map.get(city);

if (codeStr != null) {

int code = Integer.parseInt(codeStr);

SearchActivity.this.setResult(code);

finish();

} else {

auto.setText("中國沒有這樣的城市,請重新輸入"

+ "或"

+ "輸入內容不能為空");

}

}

});

}

private void initData() {

try {

InputStream is = getAssets().open("city_code.xml");

map = new XMLParser().getMap(is);

} catch (IOException e) {

e.printStackTrace();

}

}

}

XMLParser(XML解析工具類)

package com.qianfeng.weather;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserException;

import org.xmlpull.v1.XmlPullParserFactory;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.security.Key;

import java.util.HashMap;

import java.util.Map;

import static java.net.Proxy.Type.HTTP;

public class XMLParser {

/**

*xml解析? pull? sax 。。。

*/

public Map getMap(InputStream is) {

Map map = new HashMap<>();

try {

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

XmlPullParser parser = factory.newPullParser();

parser.setInput(new BufferedReader(new InputStreamReader(is)));

//? ? ? ? ? ? parser.setInput(is,null);

//? ? ? ? ? ? XmlPullParser.END_DOCUMENT

//? ? ? ? ? ? XmlPullParser.START_DOCUMENT

//? ? ? ? ? ? XmlPullParser.START_TAG

//? ? ? ? ? ? XmlPullParser.END_TAG

//? ? ? ? ? ? XmlPullParser.TEXT

int eventType = parser.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) {

if (eventType == XmlPullParser.START_TAG) {

String name = parser.getName();

if ("key".equals(name)) {

String key = parser.nextText();

parser.next();

parser.next();

String value = parser.nextText();

map.put(key, value);

}

}

parser.next();

eventType = parser.getEventType();

}

} catch (Exception e) {

e.printStackTrace();

}

return map;

}

}

activity_search.xml(搜索頁面布局)

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@mipmap/background"

android:padding="5dp"

android:orientation="vertical" >

android:id="@+id/iv_search"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_marginRight="17dp"

android:src="@mipmap/search" />

android:id="@+id/autoTV"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentEnd="true"

android:layout_alignParentRight="true"

android:layout_marginEnd="41dp"

android:layout_marginRight="41dp"

android:hint="請輸入城市" />

5、AndroidManifest清單文件如下:

package="com.qianfeng.weather">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

7、加載網絡不好轉圈動畫用的自定義幀動畫pb_bg.xml,具體代碼如下:

android:drawable="@mipmap/pb00"

android:duration="200"/>

android:drawable="@mipmap/pb01"

android:duration="200"/>

android:drawable="@mipmap/pb02"

android:duration="200"/>

android:drawable="@mipmap/pb03"

android:duration="200"/>

android:drawable="@mipmap/pb04"

android:duration="200"/>

android:drawable="@mipmap/pb05"

android:duration="200"/>

android:drawable="@mipmap/pb06"

android:duration="200"/>

android:drawable="@mipmap/pb07"

android:duration="200"/>

android:drawable="@mipmap/pb08"

android:duration="200"/>

android:drawable="@mipmap/pb09"

android:duration="200"/>

android:drawable="@mipmap/pb10"

android:duration="200"/>

android:drawable="@mipmap/pb11"

android:duration="200"/>

6、資源圖片等具體代碼可參考本人共享發送上傳代碼資源Weather.zip

總結

以上是生活随笔為你收集整理的android天气预报实训程序清单,Android天气预报项目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天综合网在线观看 | 欧美三级在线看 | 手机福利在线 | 男女av免费 | 免费污片网站 | 91尤物国产福利在线观看 | 欧美午夜不卡 | 麻豆一区二区在线 | 欧美老肥婆性猛交视频 | 欧美aa在线| 99国产视频在线 | av成人免费在线 | 91精品国产91久久久久福利 | av在线免 | 国产成人精品电影 | 在线观看福利片 | 国产精品久久久久久久久免费相片 | 成人一区二区三区在线 | 亚洲性精品 | 告诉我真相俄剧在线观看 | 国产精品卡一 | 五月天视频 | 高hhhhh| 激情aaa | 久久亚洲精品小早川怜子 | 亚洲最大成人网站 | 日韩免费成人 | 国产精品一区免费观看 | 一级二级三级视频 | 国产成人黄色片 | 先锋影音av资源网 | 伊人国产精品 | 正在播放木下凛凛xv99 | 牛牛超碰 | 一区二区一级片 | 我要看黄色大片 | 久久精品成人一区二区三区蜜臀 | 久久艹艹| 欧美中文在线观看 | 97福利网 | 自拍偷拍综合 | 99视频国产精品免费观看a | 少妇无码一区二区三区免费 | 波多野结衣在线观看一区 | 一品道av| 看黄色a级片 | www日本免费 | 国产精华一区二区三区 | 一本无码aⅴ久久久国产 | 色多多视频网站 | 热久久免费视频 | h片在线免费观看 | 岛国精品一区 | 91九色蝌蚪视频 | 东京久久久 | jizzjizz欧美69巨大 | 婷婷色网| 精品一区二区三区在线观看视频 | 亚洲一区二区三区播放 | 国产乱真实合集 | 亚洲欧美色视频 | 亚洲v日本 | 激情91 | 日本一二三不卡 | 亚洲av无码潮喷在线观看 | 国产福利短视频 | 久久久久久久久久久97 | 日韩av无码一区二区三区 | 国产学生美女无遮拦高潮视频 | 夜色综合| v99av| 女仆裸体打屁屁羞羞免费 | 国产综合在线观看 | 四虎影视成人永久免费观看亚洲欧美 | 免费成人在线看 | caoporen在线| 请用你的手指扰乱我吧 | 性生活一级大片 | 天天干天天谢 | 超碰98在线观看 | 99这里有精品 | 亚洲自拍天堂 | 女人被狂躁c到高潮喷水电影 | 光明影院手机版在线观看免费 | 在线观看的av | 中文字幕在线一区 | 国产视频一区二区三区在线 | 欧美日在线 | 国产黄色高清 | 竹菊影视一区二区三区 | 天堂国产一区二区三区 | 天堂在线亚洲 | 天天操天天看 | 理论片av | 美女一区| 少妇高潮久久久久久潘金莲 | 亚洲免费在线观看av | 风间由美一区二区 | 日韩精品在线看 |