精华内容
下载资源
问答
  • 第一行代码最后实战部分,做了一些优化,添加了显示信息,增加多页显示
  • 本项目是《第一行代码入行》这本书的最后一章的练手应用酷欧天气,原来的应用中使用的中国天气网的API早已失效 ,现在这个项目更改了api为和风天气修复了天气不能显示的问题,不过城市选择貌似有点bug,有两个重复的...
  • 第一行代码酷欧天气开发详细总结

    万次阅读 2016-09-10 13:42:43
    首先声明一下,本人目前也是菜鸟一名,最近几天把郭神的第一行代码的那个实战项目学着做了一遍,也学到了不少东西,涉及的知识还是蛮丰富的,感觉自己的水平也有了点提高,至少我三个月前跟着第一行代码开发的时候还...

    首先声明一下,本人目前也是菜鸟一名,最近几天把郭神的第一行代码的那个实战项目学着做了一遍,也学到了不少东西,涉及的知识还是蛮丰富的,感觉自己的水平也有了点提高,至少我三个月前跟着第一行代码开发的时候还好是蛮多看不懂的,现在自学android开发已经快五个月了,不上课的时间有时间就学学,一路滚爬过来,终于把这个项目自己看懂了,代码也自己敲出来实现了一遍,酸甜苦辣自在心中,还记得曾经有几个地方的bug因为自己的粗心,调试了好几个小时才调试出来,成功把bug改好的那一刻我的内心的感觉无法言表,下面先总体概述一下本项目用到的知识点:

    1 )git,相信你应该对这个名词并不陌生吧,如果你还比较陌生,不知道git有啥作用的话,就先跟着我的另一篇博客学学git的使用吧,[点我学习如何初步入门git](http://blog.csdn.net/aiyuan1996/article/details/52431134

    2 )http网络请求

    3)JSON数据解析

    4)android UI

    5 )sqlite数据库操作

    6)service服务和BroadcastReceiver

    先看一下中国天气网的天气API接口吧
    http://www.weather.com.cn/data/list3/city.xml
    不过没关系,右键查看网页源代码即可,我们能看见省名和相应的代号
    这里写图片描述
    不同省份之间以逗号分隔,省份之间以单竖线隔开,如何使用这些代号呢,例如20是湖北,那我们就在网址那一栏在city的20的后面加上20即可
    如(http://www.weather.com.cn/data/list3/city20.xml),如下图
    这里写图片描述
    我们已经得到湖北省的市了,看见每个市也有一个相应的代号,以武汉为例,然后输入http://www.weather.com.cn/data/list3/city2001.xml
    这里写图片描述
    然后我们以江夏区为例,
    http://www.weather.com.cn/data/list3/city200105.xml
    会看见江夏区的天气代号,有了天气代号,我们就可以查看江夏区的天气情况了,
    这里写图片描述
    根据天气代号我们输入如下网址查看江夏区的天气情况
    可能会出现乱码问题,我们只需把编码改成utf-8就ok了
    这里写图片描述
    能得到天气情况,然后在代码中通过json解析就可以了。

    下面先给出效果图
    项目布局包类图,在这里,我们采用了mvc(Model–view–controller)架构模式,为方便管理,我们要定义几个包,activity,db,model,receiver,receiver,service,util
    其中activity包用于存放相关活动的类,db则是存放数据库相关的类,model则是存放模型相关的类,receiver则是存放所有广播接收器相关的类,service则是存放服务相关的类,util市工具类。

    这里写图片描述
    三级省市县的省级
    这里写图片描述
    三级省市县的市级
    这里写图片描述
    三级省市县的县级
    这里写图片描述
    随便点一个,查看天气
    这里写图片描述
    按下左上角的按钮,是回到省级页面,刷新按钮刷新天气
    手机返回键连续按两次退出程序
    这里写图片描述

    CSDN下载地址:点我下载源代码

    github下载地址:点我下载源代码

    就开始我们的讲解的!(ps:代码中有很多打印语句,是我在测试的时候留下的,没删掉是因为如果有不懂的地方,这样调试起来也方便)
    第一行代码酷欧天气开发(一)

    展开全文
  • 第一行代码酷欧天气开发(一)

    千次阅读 热门讨论 2016-09-10 15:17:27
    第一阶段我们要做的就是创建数据库和表,这里我们要查询的是天气的三级省市县,province,city,county这三张表,

    第一阶段我们要做的就是创建数据库和表,这样服务器获取到的数据才能保存到本地,province,city,county这三张表,

    package com.coolweather.app.db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    public class CoolWeatherOpenHelper extends SQLiteOpenHelper{
        String TAG = "CoolWeatherOpenHelper";
        /**
         * Province建表语句
         */
        public static final String CREATE_PROVINCE = "create table Province("
                + "id integer primary key autoincrement,"//自增长主键
                + "province_name text,"//省名
                + "province_code text)";//省级代号
    
        /**
         * City建表语句
         */
        public static final String CREATE_CITY = "create table City("
                + "id integer primary key autoincrement,"//自主增长键
                + "city_name text,"//城市名
                + "city_code text,"//市级代号
                + "province_id integer)";//City表关联Province表的外键
        /**
         * County 表建表语句
         */
        public static final String CREATE_COUNTY = "create table County("
                + "id integer primary key autoincrement,"//自主增长键
                + "county_name text,"//县名
                + "county_code text,"//县级代号
                + "city_id integer)";//County表链City表的外键
    
        public CoolWeatherOpenHelper(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_PROVINCE);
            Log.i(TAG, "province created");
            db.execSQL(CREATE_CITY);
            Log.i(TAG, "city created");
            db.execSQL(CREATE_COUNTY);
            Log.i(TAG, "county created");
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    
    }
    

    上面的代码很简单,也很容易了解,三条建表语句,然后再oncreate方法里面执行。
    然后,很正常的我们就应该想到应该建立几个实体类了,方便后续的开发工作,因此,在model包下建立Province类

    package com.coolweather.app.model;
    
    /**
     * province的实体类,方便对province的操作
     * @author aiyuan
     * @time 2016.9.7
     */
    public class Province {
        private int id;
        private String provinceName;
        private String provinceCode;
        public int getId(){
            return id;
        }
        public void setId(int id){
            this.id = id;
        }
        public String getProvinceName(){
            return provinceName;
        }
        public void setProvinceName(String provinceName){
            this.provinceName = provinceName;
        }
        public String getProvinceCode(){
            return provinceCode;
        }
        public void setProvinceCode(String provinceCode){
            this.provinceCode = provinceCode;
        }
    
    }
    

    接着在model包下建立City类

    package com.coolweather.app.model;
    
    /**
     * City的实体类,方便对City的操作
     * @author aiyuan
     * @time 2016.9.7
     *
     */
    public class City {
        private int id;
        private String cityName;
        private String cityCode;
        private int provincdId;
        public int getId(){
            return id;
        }
        public void setId(int id){
            this.id = id;
        }
        public String getCityName(){
            return cityName;
        }
        public void setCityName(String cityName){
            this.cityName = cityName;
        }
        public String getCityCode(){
            return cityCode;
        }
        public void setCityCode(String cityCode){
            this.cityCode = cityCode;
        }
        public int getProvinceId(){
            return provincdId;
        }
        public void setProvinceId(int provinceId){
            this.provincdId = provinceId;
        }
    
    }
    

    然后在model包下建立County类

    package com.coolweather.app.model;
    
    /**
     * County的实体类,方便对County的操作
     * @author aiyuan
     * @time 2016.9.7
     *
     */
    public class County {
        private int id;
        private String countyName;
        private String countyCode;
        private int cityId;
        public int getId(){
            return id;
        }
        public void setId(int id){
            this.id = id;
        }
        public String getCountyName(){
            return countyName;
        }
        public void setCountyName(String countyName){
            this.countyName = countyName;
        }
        public String getCountyCode(){
            return countyCode;
        }
        public void setCountyCode(String countyCode){
            this.countyCode = countyCode;
        }
        public int getCityId(){
            return cityId;
        }
        public void setCityId(int cityId){
            this.cityId = cityId;
        }
    
    
    }
    

    是不是感觉很简单,没错,这三个实体类就是只有些字段和一些get,set方法,用于获取和设置相应的字段。
    接下来,我们还需要创建一个Cool WeatherDB类,将我们一些常用的数据库操作封装起来,以便后续使用

    package com.coolweather.app.db;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.coolweather.app.model.City;
    import com.coolweather.app.model.County;
    import com.coolweather.app.model.Province;
    
    import android.Manifest.permission;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    
    /**
     * 把一些常用的数据库操作封装起来,方便日后使用
     * @author aiyuan
     * @time 2016.9.7
     *
     */
    public class CoolWeatherDB {
        String TAG = "CoolWeatherDB";
        /**
         * 数据库名
         */
    
        public static final String DB_NAME = "cool_weather";
        /**
         * 数据库版本
         */
    
        public static final int VERSION = 1;
        private static CoolWeatherDB coolWeatherDB;
        private SQLiteDatabase db;
    
        /**
         * 将构造方法私有化
         * @param context
         */
        private CoolWeatherDB(Context context) {
            CoolWeatherOpenHelper dbHelper = new CoolWeatherOpenHelper(context, DB_NAME, null, VERSION);
            Log.i(TAG, "dbHelper create success");
            db = dbHelper.getWritableDatabase();
            Log.i(TAG, "db create success");
        }
    
        /**
         * 获取CoolWeatherDB的实例
         * @param context
         * @return coolWeatherDB
         */
        public synchronized static CoolWeatherDB getInstance(Context context){
            if(coolWeatherDB == null)
                coolWeatherDB = new CoolWeatherDB(context);
            return coolWeatherDB;
        }
    
        /**
         * 将province实例存储到数据库
         * @param province
         */
        public void saveProvince(Province province){
            if(province != null){
                ContentValues values = new ContentValues();
                values.put("province_name", province.getProvinceName());
                values.put("province_code", province.getProvinceCode());
                db.insert("Province", null, values);
            }
        }
    
        /**
         * 从数据库读取全国的所有省份信息
         * @return List<Province>
         */
        public List<Province> loadProvince(){
            List<Province> list = new ArrayList<Province>();
            Cursor cursor = db.query("Province", null, null, null, null, null, null);
            if(cursor.moveToFirst()){
                do{
                    Province province = new Province();
                    province.setId(cursor.getInt(cursor.getColumnIndex("id")));
                    province.setProvinceName(cursor.getString(cursor.getColumnIndex("province_name")));
                    province.setProvinceCode(cursor.getString(cursor.getColumnIndex("province_code")));
                    list.add(province);
                }while(cursor.moveToNext());
            }
            if(cursor != null)
                cursor.close();
            return list;
        }
    
        /**
         * 将City实例存储到数据库
         * @param city
         */
        public void saveCity(City city){
            if(city != null){
                ContentValues values = new ContentValues();
                values.put("city_name", city.getCityName());
                values.put("city_code", city.getCityCode());
                values.put("province_id", city.getProvinceId());
                db.insert("City", null, values);
            }
        }
    
        /**
         * 从数据库读取某省下所有的城市信息
         * @param provinceId
         * @return List<City>
         */
        public List<City> loadCities(int provinceId){
            List<City> list = new ArrayList<City>();
            Cursor cursor = db.query("City", null, "province_id = ?", new String[]{String.valueOf(provinceId)}, null, null, null);
            if(cursor.moveToFirst()){
                do{
                    City city = new City();
                    city.setId(cursor.getInt(cursor.getColumnIndex("id")));
                    city.setCityName(cursor.getString(cursor.getColumnIndex("city_name")));
                    city.setCityCode(cursor.getString(cursor.getColumnIndex("city_code")));
                    city.setProvinceId(provinceId);
                    list.add(city);
                }while(cursor.moveToNext());
            }
            if(cursor != null)
                cursor.close();
            return list;
        }
    
        /**
         * 将County实例 存入数据库
         * @param county
         */
        public void saveCounty(County county){
            if(county != null){
                ContentValues values = new ContentValues();
                values.put("county_name", county.getCountyName());
                values.put("county_code", county.getCountyCode());
                values.put("city_id", county.getCityId());
                db.insert("County", null, values);
            }
        }
    
        /**
         * 从数据库读取某城市下所有的县信息
         * @param cityId
         * @return List<County>
         */
        public List<County> loadCounties(int cityId){
            List<County> list = new ArrayList<County>();
            Cursor cursor = db.query("County", null, "city_id = ?", new String[]{String.valueOf(cityId)}, null, null, null);
            if(cursor.moveToFirst()){
                do{
                    County county = new County();
                    county.setId(cursor.getInt(cursor.getColumnIndex("id")));
                    county.setCountyName(cursor.getString(cursor.getColumnIndex("county_name")));
                    county.setCountyCode(cursor.getString(cursor.getColumnIndex("county_code")));
                    Log.d(TAG,cursor.getString(cursor.getColumnIndex("county_name"))+"hell");
                    Log.d(TAG,cursor.getString(cursor.getColumnIndex("county_code"))+"hell");
                    county.setCityId(cityId);
                    list.add(county);
                }while(cursor.moveToNext());
    
            }
            if(cursor != null)
                cursor.close();
            return list;
        }
    
    }
    

    可以看到,这个CoolWeatherDB类并没有继承别的什么类,通过Ctrl+o我们可以看到这个类里面有这么些东西
    这里写图片描述
    其中,getInstance方法用于获取Cool WeatherDB的实例,这样就保证在全局范围内只有一个Cool WeatherDB的实例,接下来,有六个方法,
    分别用于存储省份数据,读取省份数据,存取城市数据,读取城市数据,存储县数据,读取县数据,下面我以省份的存储和读取为例,讲解一下,城市,县的存储和读取和省的差不多
    saveprovince()方法
    这里写图片描述
    loadProvince()方法
    这里写图片描述
    第一阶段完!!请看下一阶段!
    第一行代码酷欧天气开发(二)

    展开全文
  • 第一行代码酷欧天气APP开发(一)

    千次阅读 2018-02-24 11:47:21
    4)可以手动更新天气和后台自动更天气 2.需要的技术 UI界面,网络请求,数据库操作,后台服务等 2.1原型图 3.数据准备 1)天气接口信息 a.使用阿里的付费版接口,0.01元调用10000次 b.和风天气,免费用h...

    项目图:

     

    1.需求功能

    1)罗列出全国所有的省/市/县

    2)可以查看全国任意城市的天气信息

    3)可以自由切换城市,查看其它城市的天气

    4)可以手动更新天气和后台自动更天气

    2.需要的技术

    UI界面,网络请求,数据库操作,后台服务等

    2.1原型图

    3.数据准备

    1)天气接口信息

    a.使用阿里的付费版接口,0.01元调用10000次

    b.和风天气,免费用https://www.heweather.com/

    2)全国省市县三级接口数据

    自己写一个接口,供调用

     

    接口准备:

    1)获取全国所有省份接口:

    1) 请求地址

     

    http://www.hotschool.top/cool/api/area/china

    2) 调用方式:HTTP get

    3) 接口描述:

    接口描述详情

    4) 请求参数:

    5) 请求返回结果:

    [
        {
            "codeid":"11",
            "name":"北京"
        },
        {
            "codeid":"12",
            "name":"天津"
        },
        {
            "codeid":"13",
            "name":"河北"
        },
        {
            "codeid":"14",
            "name":"山西"
        },
        {
            "codeid":"15",
            "name":"内蒙古"
        },
        {
            "codeid":"21",
            "name":"辽宁"
        },
        {
            "codeid":"22",
            "name":"吉林"
        },
        {
            "codeid":"23",
            "name":"黑龙江"
        },
        {
            "codeid":"31",
            "name":"上海"
        },
        {
            "codeid":"32",
            "name":"江苏"
        },
        {
            "codeid":"33",
            "name":"浙江"
        },
        {
            "codeid":"34",
            "name":"安徽"
        },
        {
            "codeid":"35",
            "name":"福建"
        },
        {
            "codeid":"36",
            "name":"江西"
        },
        {
            "codeid":"37",
            "name":"山东"
        },
        {
            "codeid":"41",
            "name":"河南"
        },
        {
            "codeid":"42",
            "name":"湖北"
        },
        {
            "codeid":"43",
            "name":"湖南"
        },
        {
            "codeid":"44",
            "name":"广东"
        },
        {
            "codeid":"45",
            "name":"广西"
        },
        {
            "codeid":"46",
            "name":"海南"
        },
        {
            "codeid":"50",
            "name":"重庆"
        },
        {
            "codeid":"51",
            "name":"四川"
        },
        {
            "codeid":"52",
            "name":"贵州"
        },
        {
            "codeid":"53",
            "name":"云南"
        },
        {
            "codeid":"54",
            "name":"西藏"
        },
        {
            "codeid":"61",
            "name":"陕西"
        },
        {
            "codeid":"62",
            "name":"甘肃"
        },
        {
            "codeid":"63",
            "name":"青海"
        },
        {
            "codeid":"64",
            "name":"宁夏回族自治区"
        },
        {
            "codeid":"65",
            "name":"新疆维吾尔自治区"
        },
        {
            "codeid":"71",
            "name":"台湾"
        },
        {
            "codeid":"81",
            "name":"香港"
        },
        {
            "codeid":"91",
            "name":"澳门"
        }
    ]

    2)根据省市自治区codeid获取对应的市名(例如:河北是13):

    1) 请求地址

    http://www.hotschool.top/cool/api/area/city/13

     

    2) 调用方式:HTTP get

     

    3) 接口描述:

    接口描述详情

    4) 请求参数:

    5) 请求返回结果:

    [
        {
            "codeid":"1301",
            "name":"石家庄"
        },
        {
            "codeid":"1302",
            "name":"唐山"
        },
        {
            "codeid":"1303",
            "name":"秦皇岛"
        },
        {
            "codeid":"1304",
            "name":"邯郸"
        },
        {
            "codeid":"1305",
            "name":"邢台"
        },
        {
            "codeid":"1306",
            "name":"保定"
        },
        {
            "codeid":"1307",
            "name":"张家口"
        },
        {
            "codeid":"1308",
            "name":"承德"
        },
        {
            "codeid":"1309",
            "name":"沧州"
        },
        {
            "codeid":"1310",
            "name":"廊坊"
        },
        {
            "codeid":"1311",
            "name":"衡水"
        }
    ]

     

    3)根据城市codeid获取对应的县级名称(石家庄codeid1301):

     

    1) 请求地址

    http://www.hotschool.top/cool/api/area/city/1301

     

    2) 调用方式:HTTP get

     

    3) 接口描述:

    接口描述详情

    4) 请求参数:

    5) 请求返回结果:

    [
        {
            "codeid":"130101",
            "name":"市辖区"
        },
        {
            "codeid":"130102",
            "name":"长安区"
        },
        {
            "codeid":"130103",
            "name":"桥东区"
        },
        {
            "codeid":"130104",
            "name":"桥西区"
        },
        {
            "codeid":"130105",
            "name":"新华区"
        },
        {
            "codeid":"130106",
            "name":"郊 区"
        },
        {
            "codeid":"130107",
            "name":"井陉矿区"
        },
        {
            "codeid":"130121",
            "name":"井陉县"
        },
        {
            "codeid":"130123",
            "name":"正定县"
        },
        {
            "codeid":"130124",
            "name":"栾城县"
        },
        {
            "codeid":"130125",
            "name":"行唐县"
        },
        {
            "codeid":"130126",
            "name":"灵寿县"
        },
        {
            "codeid":"130127",
            "name":"高邑县"
        },
        {
            "codeid":"130128",
            "name":"深泽县"
        },
        {
            "codeid":"130129",
            "name":"赞皇县"
        },
        {
            "codeid":"130130",
            "name":"无极县"
        },
        {
            "codeid":"130131",
            "name":"平山县"
        },
        {
            "codeid":"130132",
            "name":"元氏县"
        },
        {
            "codeid":"130133",
            "name":"赵 县"
        },
        {
            "codeid":"130181",
            "name":"辛集市"
        },
        {
            "codeid":"130182",
            "name":"藁城市"
        },
        {
            "codeid":"130183",
            "name":"晋州市"
        },
        {
            "codeid":"130184",
            "name":"新乐市"
        },
        {
            "codeid":"130185",
            "name":"鹿泉市"
        }
    ]


    好了,以上就是第一天的数据准备,剩下的天气接口,下次再弄。

    展开全文
  • 第一行代码酷欧天气开发(五)

    千次阅读 2016-09-11 13:10:05
    为了更加智能,我们在这里假如后台自动更新天气的功能,这样就可以尽可能地保证每次打开软件时看到的都是最新的天气信息,想要实现这个功能,就需要创建个长期在后台运行的定时任务。

    为了更加智能,我们在这里假如后台自动更新天气的功能,这样就可以尽可能地保证每次打开软件时看到的都是最新的天气信息,想要实现这个功能,就需要创建一个长期在后台运行的定时任务。
    我们在service包下新建一个AutoUpdateService继承自service

    package com.coolweather.app.service;
    
    import com.coolweather.app.receiver.AutoUpdateReceiver;
    import com.coolweather.app.util.HttpCallbackListener;
    import com.coolweather.app.util.HttpUtil;
    import com.coolweather.app.util.Utility;
    
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.IBinder;
    import android.os.SystemClock;
    import android.preference.PreferenceManager;
    
    public class AutoUpdateService extends Service{
    
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            new Thread(new Runnable() {
    
                @Override
                public void run() {
                    updateWeather();
                }
            }).start();
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            int anHour = 60*60*1000*8;//八小时的毫秒数
            long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
            Intent intent1 = new Intent(this,AutoUpdateReceiver.class);
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent1, 0);
            alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
            return super.onStartCommand(intent1, flags, startId);
        }
        private void updateWeather() {
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String weatherCode = sharedPreferences.getString("weather_code", "");
            String address = "http://www.weather.com.cn/data/cityinfo/" + weatherCode + ".html";
            HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
    
                @Override
                public void onFinish(String response) {
                    Utility.handlerWeatherResponse(AutoUpdateService.this, response);
                }
    
                @Override
                public void onError(Exception e) {
                    e.printStackTrace();
                }
            });
        }
    
    }
    

    可以看到,在onStartCommand()方法中先是开启了一个子线程,然后在子线程中调用updateWeather()方法来更新天气,我们仍然会将服务器返回的天气数据交给UtilityhandleWeatherResponse()方法来处理,这样就可以把最新的天气信息存储到SharedPreferences()文件中

    然后在receiver包下新建一个AutoUpdateReceiver继承自BroadcastReceiver

    package com.coolweather.app.receiver;
    
    import com.coolweather.app.service.AutoUpdateService;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    
    public class AutoUpdateReceiver extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent intent1 = new Intent(context,AutoUpdateService.class);
            context.startService(intent1);
        }
    
    }
    

    其实在我们的WeatherActivity里面的showWeatherInfo()方法中,有这么两行代码,看看

    Intent intent = new Intent(this, AutoUpdateService.class);
            startService(intent);

    启动AutoUpdateService这个服务,这样只要选中了某个城市并成功更新天气后,AutoUpdateService就会在后台一直运行
    最后,别忘了在xml文件中注册新增的服务和广播接收器

    <service android:name=".service.AutoUpdateService"></service>
            <receiver android:name=".receiver.AutoUpdateReceiver"></receiver>

    好了,搞定!!!可能有很多地方有谬误。

    CSDN下载地址,点我下载source code

    github下载地址,点我下载source code

    展开全文
  • 本篇主要介绍爬虫的一些前期准备工作以及Python+Selenium爬虫的主要思路、准备工作1、Selenium的介绍与安装Selenium是个Web的自动化(测试)工具,它可以根据我们的指令,让浏览器执行自动加载页面,获取需要的...
  • 第一行代码酷欧天气开发(四)

    千次阅读 2016-09-10 21:09:40
    首先来创建布局文件,布局文件的控件就要根据服务器返回的天气数据来决定了
  • 第一行代码酷欧天气开发(三)

    千次阅读 2016-09-10 20:41:00
    这步是最关键的一步,编写用于遍历省市县数据的activity了,在activity包下面新建ChooseAreaActivity继承自Activity该类的逻辑是下面这样的: 在onCreate()方法中显示获取到了一些控件的实例,然后去初始化...
  • 第一行代码酷欧天气开发(二)

    千次阅读 2016-09-10 16:29:02
    在这阶段,我们的目标是遍历全国省市县数据,我们从前面的介绍中已经看出,我们可以从服务器端得到我们想要的数据,因此在这里和服务器的交互是少不了的了,所以我们现在util包下增加个HttpUtil类
  • 天气慢慢转凉,朋友们注意添衣保暖,愉快撸码。距离 TZM.XFramework 的首秀已数月有余,期间收到不少朋友的鼓励、建议和反馈,在此致以深深的感谢。不少围观的朋友经常问题我,.NET 体系下优秀的 O/RM 官方的有EF,....
  • 我照着第一行代码酷欧天气的代码编写之后(书中是第二阶段的代码),在手机上测试运行,一直显示“正在加载。。。”。想请问一下如何解决?百度了之后说是接口过期,难道是那个天气API不能用了吗?
  • 使用Kotlin对《第一行代码:Android》——郭霖,重写了最后的实践”酷欧天气

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 180
精华内容 72
关键字:

第一行代码酷欧天气