TopView_天气预报_(一)

本文介绍了作者初次使用Android进行天气预报应用的开发经验,重点讨论了异步加载和JSON解析的过程。在师兄的指导下,作者意识到实际项目中的异步加载和JSON理解并不复杂。通过创建一个继承自AsyncTask的类,处理URL输入参数、后台运行的百分比进度以及最终返回的文字结果,作者完成了任务,并对此进行了通俗易懂的总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
题目:利用伟鹤师兄给的链接,加载上面的天气数据,做一个天气预报的Android软件

 

新知识点:1、异步加载

                  2、json获取与解析

                  3、apacheHTTP获取数据

 

      第一次写博文,但愿能详细地写下做完任务后的感想、体会,和收获。

      进工作室没多久(两天),师兄就给小任务,其实是好事,发现做完后写到不少东西,比坐在那自学更有冲劲,更有兴趣。师兄首先给我讲解了一下异步加载和JSON,一开始被他讲得有点晕,后来接受就感觉这部分蛮简单的。

      简单总结下这次做天气预报用异步加载和JSON解析的体会,算是复习咯。下面就通俗地写吧,反正就只有自己看 = =。

      首先写一个类继承AsyncTask<Params,Progress,Result>。Params根据优快云的某博文是指“启动任务执行的输入参数,比如URL”,想起我的确要传URL进去,这里我就写了String,Progress是后台运行的百分比,不是很懂有什么用,随便写了Integer,Result是后台执行任务最终返回的结果,因为我要返回文字信息,写了String。

 

      然后重写里面重要的三个函数,onPreExecute()、doInBackground(Params)、onPostExecute(Result)

第一个和第三个是在UI线程,只有第二是在异步,第二个十分重要,必须重写,获取数据的代码就写在第二个函数中。第一个是在异步加载数据前,可以在里面写一些提示或toast。第三个接收第二个函数返回的数据并呈现在UI界面上,result就是接收的数据。
 
       首先我在doInBackground函数中用apacheHTTP获取数据,
 
       HttpClient client=new DefaultHttpClient();
       HttpGet get=new HttpGet(url);
       String result = "";
       HttpResponse response=client.execute(get);
       HttpEntity entity=response.getEntity();
       result = EntityUtils.toString(entity);
 
       1,实例化一个Client
       2,实例化一个Get,并URL放进去
       3,把client的get,启动,这里有点像把action放进intent然后startActivity(intent); = =(个人理解,勿喷)
 get 了以后获得一个”回应“(好抽象 = =).
       4,然后在回应中getEntity 这里的entity有Bundle,大概是数据的集合,当然这里面是JSON形式的数据
       5,用EntityUtils把数据集合转化为字符串,得到JSON格式的字符串用于后面解析,EntityUtils很方便的说,同样转化为字符串,对面的大神用IO流折腾了好几行。
 
       获得了数据后,在doInBackground的最后把它 return出去,然后onPostExecute自然会接收到。然后在onPostExecute中获得JSON格式的字符串数据后,开始用JSONObejct和JSONTokener去解析。
 
       JSONTokener tokener= new JSONTokener(result);
       JSONObject object = (JSONObject) tokener.nextValue();
       JSONObject weather= (JSONObject) object.get("weatherinfo");
       //获取日期    
       date = weather.getString("date_y")+"     "+weather.getString("week");
       textview2.setText(date);
 
       1,实例化一个JSONTokener,传入JSON格式的字符串
       2,用nextValue方法获取JSONObject,注意这里的nextValue不只获取JSONObject,可以获取键值,键值对应的内容,
(突然想起有点想JAVA容器里面的next方法),” 此时还未读取任何json文本,直接读取就是一个JSONObject对象, 如果此时的读取位置在"name" : 了,那么nextValue就是"yuanzhifei89"(String)“(出自某博文)
       3,因为这里是两层JSON嵌套,所以第三行又获取一个JSONObject
       4,然后就同个键值对获取字符串内容并展现在UI组件上。
 
       以上都是这次任务碰到以及学到的新知识咯,虽是主要内容,但难度不大,下面吐槽下一下自己 = =
 
      
      首先第一个吐槽的就是没好好分析师兄给的数据啦,差点以为那只有今天的天气信息,还是对面的大神够细心,专门到链接所在的网站去看,发现上面原来有好多的信息,有未来6天的信息。
 
      第二就吐槽一次自己在UI布局设计上面的烂和懒。 = =最明显的一个地方就是,别人用了好几个布局管理器并且层层嵌套,我只用了一个相对布局管理器敲打。回想一下,自己当天晚上首先突破获取数据的难关,然后就随便弄了一个布局,然后就在原来的基础上复制粘贴,修改,在布局上面没有细心,用户体验和别人的立马见分晓。教训的话.... 以后突破主要技术点后,就仔细考虑UI布局,多层使用布局管理器,背景图片之类的东西可以参照类似软件(下载下来后解压获取里面的资源图片得意
 
      第三不算吐槽,就算是惊醒自己一下:遇到死胡同一定要马上转出去。今天看到《范例大全》里面的有”页面转换“的例子,就是一键用过 setContent来改变该ACTIVITY的布局文件。但必须注意的一点是“布局文件上的组件必须先加载后注册”,今天有一个按钮是在转换后的布局文件上得,于是我在ACTITY上设置它的监听器,出现空指针异常。因为,ACTITY加载布局的时候并没用加载那个按钮,结果你直接设置监听器,这必须得出错啊 = =,后来仔细看了一下范例,它是在转换布局的按钮上注册并设置那个按钮的监听器,心想:要是我转换后的布局上有好多组件,那我那个转换的按钮岂不是要全部注册一遍,那得多麻烦啊,以后少用这招吧。
 
     第四:好的用户体验是要发心思的,想对面的大神,根据信息更换天气图标,仔细布局,用Toast代替ProgressBar和ProgressDialog,等等。。
 
     综上总结,以后突破技术难点后,就立马布局去,把UI布好了,再去写后面的代码,不然后面的代码跟UI连上后在去更改UI就很麻烦了,感觉不会爱的了抓狂
 
 
     这次任务参考的博文:HttpEntity的使用 :http://blog.youkuaiyun.com/com360/article/details/7645247
                                         android json解析及简单例子 :http://www.open-open.com/lib/view/open1326376799874.html
                                        Android中AsyncTask的简单用法 :http://blog.youkuaiyun.com/cjjky/article/details/6684959
 
    以上博文都收集在"资料文章中"
 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值