Android天气预报开发。

    刚入坑安卓不久,写了个小东西试试手。

   工程文件我也找不见了,抱歉各位

    在此感谢https://blog.csdn.net/champion0324/article/details/71304567的分享。大的框架就是抄的。(⊙o⊙)…

    API这里我并没有用和风天气的,貌似不免费开放了。感谢室友找的api。。。

  http://api.map.baidu.com/telematics/v3/weather?location=长沙&output=json&ak=vZlRYC39tTuniYzNcX2zrQmZzblZcXwp

返回的是json数据,解析一下就可以得到数据。

volley框架也不好找,这里直接贴上我zhoa

链接: https://pan.baidu.com/s/1cIUpMY7RJIneUpXZi-4xPg 提取码: d1va

例如

{
    "error": 0,
    "status": "success",
    "date": "2018-10-08",
    "results": [
        {
            "currentCity": "长沙",
            "pm25": "132",
            "index": [
                {
                    "des": "建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",
                    "tipt": "穿衣指数",
                    "title": "穿衣",
                    "zs": "舒适"
                },
                {
                    "des": "不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。",
                    "tipt": "洗车指数",
                    "title": "洗车",
                    "zs": "不宜"
                },
                {
                    "des": "天气转凉,空气湿度较大,较易发生感冒,体质较弱的朋友请注意适当防护。",
                    "tipt": "感冒指数",
                    "title": "感冒",
                    "zs": "较易发"
                },
                {
                    "des": "天气较好,赶快投身大自然参与户外运动,尽情感受运动的快乐吧。",
                    "tipt": "运动指数",
                    "title": "运动",
                    "zs": "适宜"
                },
                {
                    "des": "紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。",
                    "tipt": "紫外线强度指数",
                    "title": "紫外线强度",
                    "zs": "弱"
                }
            ],
            "weather_data": [
                {
                    "date": "周一 10月08日 (实时:21℃)",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/xiaoyu.png",
                    "weather": "多云转小雨",
                    "wind": "北风微风",
                    "temperature": "26 ~ 18℃"
                },
                {
                    "date": "周二",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/xiaoyu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/xiaoyu.png",
                    "weather": "小雨",
                    "wind": "北风微风",
                    "temperature": "20 ~ 17℃"
                },
                {
                    "date": "周三",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/yin.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/yin.png",
                    "weather": "阴",
                    "wind": "北风微风",
                    "temperature": "24 ~ 15℃"
                },
                {
                    "date": "周四",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
                    "weather": "多云",
                    "wind": "北风微风",
                    "temperature": "23 ~ 13℃"
                }
            ]
        }
    ]
}

在此,推荐一个解析的软件,postman,可以让解析更加清晰。

先看看之前的界面。low的一比。。。于是后面优化了一下。

Android天气预报开发。_第1张图片

 框架大体是一样的。记得在AndroidManifest中添加权限:在标签页内添加

  

mainactivity代码见下,主要就是调用解析,并将部分数据用intent传入到第二界面。其中解析之后使用的list,可能有点费劲。

package com.example.a_new_start;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;

import org.json.JSONObject;

import java.util.List;

public class MainActivity extends Activity implements View.OnClickListener {
    int flag_right = 0;
    RequestQueue queue = null;
    EditText et_city;
    TextView tv_city, tv_nowtemp, tv_pm25, tv_pm_degree;
    TextView tv_11, tv_12, tv_13, tv_21, tv_22, tv_23, tv_31, tv_32, tv_33, tv_41, tv_42, tv_43;
    Button jump;
    Editable city;
    String des_1, des_2, des_3, des_4, des_5, tipt_zs_1, tipt_zs_2, tipt_zs_3, tipt_zs_4, tipt_zs_5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        queue = Volley.newRequestQueue(this);
        et_city = (EditText) findViewById(R.id.et_city);
        tv_city = (TextView) findViewById(R.id.id_tv_city);
        tv_pm25 = (TextView) findViewById(R.id.tv_pm25);
        tv_pm_degree = (TextView) findViewById(R.id.tv_pm_degree);
        tv_nowtemp = (TextView) findViewById(R.id.id_tv_nowtemp);
        jump = (Button) findViewById(R.id.btn_jump);
        jump.setOnClickListener(this);

        tv_11 = (TextView) findViewById(R.id.tv_11);
        tv_12 = (TextView) findViewById(R.id.tv_12);
        tv_13 = (TextView) findViewById(R.id.tv_13);

        tv_21 = (TextView) findViewById(R.id.tv_21);
        tv_22 = (TextView) findViewById(R.id.tv_22);
        tv_23 = (TextView) findViewById(R.id.tv_23);

        tv_31 = (TextView) findViewById(R.id.tv_31);
        tv_32 = (TextView) findViewById(R.id.tv_32);
        tv_33 = (TextView) findViewById(R.id.tv_33);

        tv_41 = (TextView) findViewById(R.id.tv_41);
        tv_42 = (TextView) findViewById(R.id.tv_42);
        tv_43 = (TextView) findViewById(R.id.tv_43);
    }

    public void weatherClick(View view) {
        city = et_city.getText();
        flag_right = 1;
        String url = "http://api.map.baidu.com/telematics/v3/weather?location=" + city + "&output=json&ak=vZlRYC39tTuniYzNcX2zrQmZzblZcXwp";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                System.out.println(jsonObject);
                Gson gson = new Gson();
                WeatherBean jiepanxia = gson.fromJson(jsonObject.toString(), WeatherBean.class);
                if (jiepanxia.getError() == 0) {
                    //  List jiepanxia;
                    String locate = jiepanxia.getResults().get(0).getCurrentCity();   //城市
                    String date = jiepanxia.getResults().get(0).getWeather_data().get(0).getDate();  //日期
                    String s_pm = jiepanxia.getResults().get(0).getPm25();
                    String empty = "";    //一个空的字符串,坑爹api县级市没有pm2.5指数
                    StringBuffer pm_degree = new StringBuffer();
                    int flag = 0;
                    if (s_pm.equals(empty) == false) {
                        flag = 1;
                        int pmint = Integer.parseInt(s_pm);

                        if (pmint < 50)             //0-50
                            pm_degree.append("空气质量:优");
                        else if (pmint < 100)      //50-100
                            pm_degree.append("空气质量:良");
                        else if (pmint < 150)
                            pm_degree.append("空气质量:轻度污染");
                        else if (pmint < 200)
                            pm_degree.append("空气质量:中度污染");
                        else if (pmint < 300)
                            pm_degree.append("空气质量:重度污染");
                        else
                            pm_degree.append("空气质量:严重污染");
                    }

                    String tv11 = jiepanxia.getResults().get(0).getWeather_data().get(0).getDate();             //相当于一个行列矩阵。具体看实际图片
                    String tv12 = jiepanxia.getResults().get(0).getWeather_data().get(0).getWeather();
                    String tv13 = jiepanxia.getResults().get(0).getWeather_data().get(0).getTemperature();

                    String tv21 = jiepanxia.getResults().get(0).getWeather_data().get(1).getDate();
                    String tv22 = jiepanxia.getResults().get(0).getWeather_data().get(1).getWeather();
                    String tv23 = jiepanxia.getResults().get(0).getWeather_data().get(1).getTemperature();

                    String tv31 = jiepanxia.getResults().get(0).getWeather_data().get(2).getDate();
                    String tv32 = jiepanxia.getResults().get(0).getWeather_data().get(2).getWeather();
                    String tv33 = jiepanxia.getResults().get(0).getWeather_data().get(2).getTemperature();

                    String tv41 = jiepanxia.getResults().get(0).getWeather_data().get(3).getDate();
                    String tv42 = jiepanxia.getResults().get(0).getWeather_data().get(3).getWeather();
                    String tv43 = jiepanxia.getResults().get(0).getWeather_data().get(3).getTemperature();

                    tipt_zs_1 = jiepanxia.getResults().get(0).getIndex().get(0).getTipt() + ":" + jiepanxia.getResults().get(0).getIndex().get(0).getZs();
                    tipt_zs_2 = jiepanxia.getResults().get(0).getIndex().get(1).getTipt() + ":" + jiepanxia.getResults().get(0).getIndex().get(1).getZs();
                    tipt_zs_3 = jiepanxia.getResults().get(0).getIndex().get(2).getTipt() + ":" + jiepanxia.getResults().get(0).getIndex().get(2).getZs();
                    tipt_zs_4 = jiepanxia.getResults().get(0).getIndex().get(3).getTipt() + ":" + jiepanxia.getResults().get(0).getIndex().get(3).getZs();
                    tipt_zs_5 = jiepanxia.getResults().get(0).getIndex().get(4).getTipt() + ":" + jiepanxia.getResults().get(0).getIndex().get(4).getZs();

                    des_1 = jiepanxia.getResults().get(0).getIndex().get(0).getDes();
                    des_2 = jiepanxia.getResults().get(0).getIndex().get(1).getDes();
                    des_3 = jiepanxia.getResults().get(0).getIndex().get(2).getDes();
                    des_4 = jiepanxia.getResults().get(0).getIndex().get(3).getDes();
                    des_5 = jiepanxia.getResults().get(0).getIndex().get(4).getDes();

                    char[] data_1 = tv11.toCharArray();
                    StringBuffer the = new StringBuffer();
                    the.append(data_1[0]);
                    the.append(data_1[1]);
                    the.append("(本日)");
                    
                    char[] datearr = date.toCharArray();
                    StringBuffer now = new StringBuffer();
                    int k = 0;
                    for (int i = 0; i < date.length(); i++) {
                        if (datearr[i] == ':') {
                            k = i;
                            break;
                        }
                    }
                    for (int i = k + 1; datearr[i] != ')'; i++) {
                        now.append(datearr[i]);
                    }
                    tv_11.setText(the.toString());
                    tv_12.setText(tv12);
                    tv_13.setText(tv13);

                    tv_21.setText(tv21);
                    tv_22.setText(tv22);
                    tv_23.setText(tv23);

                    tv_31.setText(tv31);
                    tv_32.setText(tv32);
                    tv_33.setText(tv33);

                    tv_41.setText(tv41);
                    tv_42.setText(tv42);
                    tv_43.setText(tv43);

                    tv_city.setText(locate);
                    tv_nowtemp.setText(now.toString());
                    if (flag == 1)
                        tv_pm25.setText("pm2.5值:" + s_pm);
                    tv_pm_degree.setText(pm_degree.toString());

                } else {
                    Toast.makeText(getApplicationContext(), "城市名称错误,请重试", Toast.LENGTH_SHORT).show();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                System.out.println(volleyError);
            }
        });
        queue.add(request);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_jump) {
            if (flag_right == 1) {     //非空
                Intent intent = new Intent(this, second.class);
                intent.putExtra("t1", tipt_zs_1);
                intent.putExtra("t2", tipt_zs_2);
                intent.putExtra("t3", tipt_zs_3);
                intent.putExtra("t4", tipt_zs_4);
                intent.putExtra("t5", tipt_zs_5);

                intent.putExtra("d1", des_1);
                intent.putExtra("d2", des_2);
                intent.putExtra("d3", des_3);
                intent.putExtra("d4", des_4);
                intent.putExtra("d5", des_5);

                startActivity(intent);
            } else {
                Toast.makeText(getApplicationContext(), "请先查询城市天气", Toast.LENGTH_SHORT).show();
            }
        }

    }
}

主界面代码。



    

        

        

附上实际图。

Android天气预报开发。_第2张图片 视图

第二界面java代码

package com.example.a_new_start;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class second extends Activity {
    TextView t_1,t_2,t_3,t_4,t_5,d_1,d_2,d_3,d_4,d_5;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.line_second);
        Intent intent =getIntent();
        String t1=intent.getStringExtra("t1");
        String t2=intent.getStringExtra("t2");
        String t3=intent.getStringExtra("t3");
        String t4=intent.getStringExtra("t4");
        String t5=intent.getStringExtra("t5");

        String d1=intent.getStringExtra("d1");
        String d2=intent.getStringExtra("d2");
        String d3=intent.getStringExtra("d3");
        String d4=intent.getStringExtra("d4");
        String d5=intent.getStringExtra("d5");

        t_1=(TextView)findViewById(R.id.tv_tipt_zs_1);
        t_2=(TextView)findViewById(R.id.tv_tipt_zs_2);
        t_3=(TextView)findViewById(R.id.tv_tipt_zs_3);
        t_4=(TextView)findViewById(R.id.tv_tipt_zs_4);
        t_5=(TextView)findViewById(R.id.tv_tipt_zs_5);

        d_1=(TextView)findViewById(R.id.tv_des_1);
        d_2=(TextView)findViewById(R.id.tv_des_2);
        d_3=(TextView)findViewById(R.id.tv_des_3);
        d_4=(TextView)findViewById(R.id.tv_des_4);
        d_5=(TextView)findViewById(R.id.tv_des_5);
        
        t_1.setText(t1);
        t_2.setText(t2);
        t_3.setText(t3);
        t_4.setText(t4);
        t_5.setText(t5);

        d_1.setText(d1);
        d_2.setText(d2);
        d_3.setText(d3);
        d_4.setText(d4);
        d_5.setText(d5);
    }
}

最后是xml代码




    
        
    

    

        
    


    
        
    

    

        
    


    
        
    

    

        
    


    
        
    

    

        
    


    
        
    

    

        
    


还有自动生成的json代码

package com.example.a_new_start;
import java.util.List;
public class WeatherBean{
    /**
     * error : 0
     * status : success
     * date : 2018-10-02
     * results : [{"currentCity":"changsha","pm25":"55","index":[{"des":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。","tipt":"穿衣指数","title":"穿衣","zs":"热"},{"des":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。","tipt":"洗车指数","title":"洗车","zs":"较适宜"},{"des":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。","tipt":"感冒指数","title":"感冒","zs":"少发"},{"des":"天气较好,户外运动请注意防晒,推荐您在室内进行低强度运动。","tipt":"运动指数","title":"运动","zs":"较适宜"},{"des":"紫外线辐射强,建议涂擦SPF20左右、PA++的防晒护肤品。避免在10点至14点暴露于日光下。","tipt":"紫外线强度指数","title":"紫外线强度","zs":"强"}],"weather_data":[{"date":"周二 10月02日 (实时:24℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"多云转晴","wind":"北风3-4级","temperature":"28 ~ 18℃"},{"date":"周三","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"无持续风向微风","temperature":"29 ~ 18℃"},{"date":"周四","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"无持续风向微风","temperature":"29 ~ 18℃"},{"date":"周五","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"北风微风","temperature":"28 ~ 18℃"}]}]
     */
    private int error;
    private String status;
    private String date;
    private List results;

    public int getError() {
        return error;
    }

    public void setError(int error) {
        this.error = error;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public List getResults() {
        return results;
    }

    public void setResults(List results) {
        this.results = results;
    }

    public static class ResultsBean {
        /**
         * currentCity : changsha
         * pm25 : 55
         * index : [{"des":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。","tipt":"穿衣指数","title":"穿衣","zs":"热"},{"des":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。","tipt":"洗车指数","title":"洗车","zs":"较适宜"},{"des":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。","tipt":"感冒指数","title":"感冒","zs":"少发"},{"des":"天气较好,户外运动请注意防晒,推荐您在室内进行低强度运动。","tipt":"运动指数","title":"运动","zs":"较适宜"},{"des":"紫外线辐射强,建议涂擦SPF20左右、PA++的防晒护肤品。避免在10点至14点暴露于日光下。","tipt":"紫外线强度指数","title":"紫外线强度","zs":"强"}]
         * weather_data : [{"date":"周二 10月02日 (实时:24℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"多云转晴","wind":"北风3-4级","temperature":"28 ~ 18℃"},{"date":"周三","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"无持续风向微风","temperature":"29 ~ 18℃"},{"date":"周四","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"无持续风向微风","temperature":"29 ~ 18℃"},{"date":"周五","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"北风微风","temperature":"28 ~ 18℃"}]
         */

        private String currentCity;
        private String pm25;
        private List index;
        private List weather_data;

        public String getCurrentCity() {
            return currentCity;
        }

        public void setCurrentCity(String currentCity) {
            this.currentCity = currentCity;
        }

        public String getPm25() {
            return pm25;
        }

        public void setPm25(String pm25) {
            this.pm25 = pm25;
        }

        public List getIndex() {
            return index;
        }

        public void setIndex(List index) {
            this.index = index;
        }

        public List getWeather_data() {
            return weather_data;
        }

        public void setWeather_data(List weather_data) {
            this.weather_data = weather_data;
        }

        public static class IndexBean {
            /**
             * des : 天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。
             * tipt : 穿衣指数
             * title : 穿衣
             * zs : 热
             */

            private String des;
            private String tipt;
            private String title;
            private String zs;

            public String getDes() {
                return des;
            }

            public void setDes(String des) {
                this.des = des;
            }

            public String getTipt() {
                return tipt;
            }

            public void setTipt(String tipt) {
                this.tipt = tipt;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }

            public String getZs() {
                return zs;
            }

            public void setZs(String zs) {
                this.zs = zs;
            }
        }

        public static class WeatherDataBean {
            /**
             * date : 周二 10月02日 (实时:24℃)
             * dayPictureUrl : http://api.map.baidu.com/images/weather/day/duoyun.png
             * nightPictureUrl : http://api.map.baidu.com/images/weather/night/qing.png
             * weather : 多云转晴
             * wind : 北风3-4级
             * temperature : 28 ~ 18℃
             */

            private String date;
            private String dayPictureUrl;
            private String nightPictureUrl;
            private String weather;
            private String wind;
            private String temperature;

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getDayPictureUrl() {
                return dayPictureUrl;
            }

            public void setDayPictureUrl(String dayPictureUrl) {
                this.dayPictureUrl = dayPictureUrl;
            }

            public String getNightPictureUrl() {
                return nightPictureUrl;
            }

            public void setNightPictureUrl(String nightPictureUrl) {
                this.nightPictureUrl = nightPictureUrl;
            }

            public String getWeather() {
                return weather;
            }

            public void setWeather(String weather) {
                this.weather = weather;
            }

            public String getWind() {
                return wind;
            }

            public void setWind(String wind) {
                this.wind = wind;
            }

            public String getTemperature() {
                return temperature;
            }

            public void setTemperature(String temperature) {
                this.temperature = temperature;
            }
        }
    }
}

有任何问题,欢迎留言~

你可能感兴趣的:(Android)