本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 1051|回复: 13
打印 上一主题 下一主题

Android菜鸟饭团#Udacity Android#第四课 活动笔记

[复制链接]
跳转到指定楼层
1#
发表于 2015-5-22 13:04:43 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
Android菜鸟饭团#Udacity Android#第四课 活动笔记

本节小问题:
1)        向API发送一个HTTP请求。
2)        需要从输入流中以JSON字符串的形式读取响应。
3)        需要通过断开连接并且关闭所有输入流,进行清理工作,并且记录了错误。
4)例子:
// These two need to be declared outside the try/catch
// so that they can be closed in the finally block.
HttpURLConnection urlConnection = null;
BufferedReader reader = null;

// Will contain the raw JSON response as a string.
String forecastJsonStr = null;

try {
    // Construct the URL for the OpenWeatherMap query
    // Possible parameters are avaiable at OWM's forecast API page, at
    URL url = new         URL("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&un        its=metric&cnt=7");

    // Create the request to OpenWeatherMap, and open the connection
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setRequestMethod("GET");
    urlConnection.connect();

    // Read the input stream into a String
    InputStream inputStream = urlConnection.getInputStream();
    StringBuffer buffer = new StringBuffer();
    if (inputStream == null) {
        // Nothing to do.
        forecastJsonStr = null;
    }
    reader = new BufferedReader(new InputStreamReader(inputStream));

    String line;
    while ((line = reader.readLine()) != null) {
        // Since it's JSON, adding a newline isn't necessary (it won't affect parsing)
        // But it does make debugging a *lot* easier if you print out the completed
        // buffer for debugging.
        buffer.append(line + "\n");
    }

    if (buffer.length() == 0) {
        // Stream was empty.  No point in parsing.
        forecastJsonStr = null;
    }
    forecastJsonStr = buffer.toString();
} catch (IOException e) {
    Log.e("PlaceholderFragment", "Error ", e);
    // If the code didn't successfully get the weather data, there's no point in attemping
    // to parse it.
    forecastJsonStr = null;
} finally{
    if (urlConnection != null) {
        urlConnection.disconnect();
    }
    if (reader != null) {
        try {
            reader.close();
        } catch (final IOException e) {
            Log.e("PlaceholderFragment", "Error closing stream", e);
        }
    }
}
为了使用HTTP在网络上发送和接受数据:
Android里有两种客户端的API:
  • HttpUrlConnection类(推荐 更通用,轻量级,专门针对大多数Android应用的需求进行优化)
  • Apache提供的HttpClient类
这两类都支持Https,以数据流的形式上传和下载,超时配置,IP v6以及连接池。

注意:
Android框架允许我们在主线程上执行网络操作工作。        
二、调试,错误信息的显示
其中Log.e()方法用来记录错误日志(通过adb命令中输入  adb logcat  来显示错误日志)
当你输出调试信息时Verbose这级别的日志在开发环境外千万不能写进代码
Debug级别的调试代码会被编译,        但真正执行时是不执行的,
Error,Warn,Info这3个级别的调试代码会被执行,
第一个参数是调试标签,第二个参数是真正的调试信息


什么是主线程?
Android程序默认在主线程上执行,也叫UI线程,(它控制了所有用户的输入和输出)

Background Thread要做的:网络请求,图片解码,读取、写入数据库

什么是异步任务Async Task?
http://blog.csdn.net/guolin_blog/article/details/11711405

课堂任务
三、添加按钮。
好的APP不应该有刷新按钮,应该在用户将要提出问题时已经准备好了答案。
在menu文件夹下创建xml文件并给定一个新的button
在String里声明这个button的名字

在app-src-目录下修改权限;
添加刷新按钮的方法:新建menu文件,加入ID名;在String类里边添加按钮的名字;



学习android权限系统  网络I/O 以及如何将耗时任务从主流线程(UI线程)中移出

因为mountain view的邮政编码是94043,这就是查询的样子。我们设置的模式为JOSN格式。也能使用94043,USA并且将会返回相同的结果。API默认返回JSON格式数据。然后我们设置温度的单位,并且要求天数为7,让我们将这个URL放入我们的APP。


为了在应用中向OpenWeatherMap请求数据,首先我们需要以之前确定的URL的形式,向API发送一个HTTP请求。然后我们需要从输入流中以JSON字符串的形式读取响应。它还没有被解析,不过我们稍后再来了解这方面的知识。接下来,我们需要通过断开连接并且关闭所有输入流,来进行清理工作。我们也记录错误日志。由于网络处理的部分有非常多样板化的代码,我们将为您提供的这些功能的代码片段。请参阅下方的GitHub链接的简介。当你看完以后,点击此框,继续往下学习。
我们推荐使用HttpUrlConnection类,因为它更为通用,轻量级,而且专门针对大多数Android应用的需求进行了优化。
我们在其中调用了Log.e()方法,这是用来记录错误日志的。

除了在开发环境下之外,Verbose这个级别的日志可是千万不能写进代码的。
第一个参数是调试标签一个任意的字符串标识符将这个调试标签在你的类中定义为常量是一个好的习惯,通常它可以是你的类名或者应用名。
第二个参数是真正的调试信息

方才我们说过了,Android框架不允许我们 在主线程上执行网络操作工作
Android程序默认是,在主线程上执行的,也叫UI线程,它控制着所有用户的输入和输出,比如绘制屏幕等。因此我们就得避免在这里有任何耗时的操作,不然界面就要卡顿,让这些需要花费大量时间的工作。
这是一个对Android开发者来说非常重要的一个问答网站
在我向你展示的方法中,只有doInBackground()方法是一定要实现的。 onPostExecute()方法和其他的方法是随意的。对于每一个方法,告诉我们它是在主线程还是在后台线程执行的。
工作完成的进度。每一次publishProgress()方法被调用的时候,


就会触发onProgressUpdate()方法的调用并传进一些信息。然后,你就可以在界面上显示进度,告诉用户某项工作已经完成10%,50%,100%。进度的显示都是发生在主线程中的。最后,一旦所有后台线程中的工作完成了,在主线程上运行的onPostExecute()方法会被调用并且会传入相应的结果数据。

在Android上, 菜单的选项是定义在XML里面的。而且它们可以被Fragment或者Activity使用


当Fragment或者Activity创建的时候它们会将XML文件扩展成应用中真正的菜单选项,你会看到这里有操作按钮,也就是菜单选项并且它们显示在ActionBar(控制栏)中。

【书记员:王尚堃】
每一个技术小白都有一个成为大神的梦想,现在Android菜鸟饭团就给你这个成就梦想的机会。我们提供最新的Android技术教学,只要你又耐心和毅力就一定会在这里有所收获。
Android菜鸟饭团南阳GDG组织发起,秉承着开放、分享、创新的原则,希望通过GDG社区的力量能够给更多的想要学习Android开发技术的小白们创造一个学习,交流,分享的环境。同往常的GDG活动一样,我们依然是任性的一个子都不要,并且还在周六的分享中提供盒饭和不定期的惊喜小礼物呦~所以快来加入我们吧,为你的大神梦想迈出第一步。
把你的个人信息和申请理由快快发送到android@chuang1.net,前来加入我们吧

ChinaGDG.com
回复

使用道具 举报

14#
发表于 2015-5-27 20:09:55 | 只看该作者
。。。。。。。。。。。

2252451e0fjrzi4dzjr40y[1].png (74.49 KB, 下载次数: 1)

。。。

。。。
ChinaGDG.com
回复 支持 反对

使用道具 举报

13#
发表于 2015-5-27 19:52:48 | 只看该作者
C:\Users\lizhenyou\新建文件夹
2252451e0fjrzi4dzjr40y[1].png
ChinaGDG.com
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2015-5-27 19:47:35 | 只看该作者
嘿嘿。。。不容易呀,。。

85E{BDU6G$RL3FTSIH6KERV.png (45.1 KB, 下载次数: 3)

85E{BDU6G$RL3FTSIH6KERV.png
ChinaGDG.com
回复 支持 反对

使用道具 举报

11#
发表于 2015-5-27 19:46:34 | 只看该作者
ChinaGDG.com
回复 支持 反对

使用道具 举报

10#
发表于 2015-5-27 19:43:12 | 只看该作者
终于跑出来了。不容易啊啊。

@Y[J(61I8W@VS4XJGMMO0AF.png (239.9 KB, 下载次数: 11)

@Y[J(61I8W@VS4XJGMMO0AF.png
ChinaGDG.com
回复 支持 反对

使用道具 举报

9#
发表于 2015-5-26 22:57:31 | 只看该作者
ChinaGDG.com
回复 支持 反对

使用道具 举报

8#
发表于 2015-5-26 22:54:09 | 只看该作者
经过这么长时间的看  问终于成功了

Screenshot_2015-05-26-19-34-24.png (74.49 KB, 下载次数: 1)

Screenshot_2015-05-26-19-34-24.png
ChinaGDG.com
回复 支持 反对

使用道具 举报

7#
发表于 2015-5-26 22:45:06 | 只看该作者
不怎么懂呀

t11.png (12.82 KB, 下载次数: 3)

t11.png
ChinaGDG.com
回复 支持 反对

使用道具 举报

6#
发表于 2015-5-26 22:41:18 | 只看该作者
C:\Users\徐佳伟\Pictures\t11.png
ChinaGDG.com
回复 支持 反对

使用道具 举报

5#
发表于 2015-5-26 22:32:43 | 只看该作者
第二课实现截图

QQ截图20150526223057.png (46.93 KB, 下载次数: 4)

QQ截图20150526223057.png
ChinaGDG.com
回复 支持 反对

使用道具 举报

4#
发表于 2015-5-26 22:19:45 | 只看该作者
刷新前的天气预报表

截屏_20150526_154800.png (61.96 KB, 下载次数: 4)

刷新前

刷新前
ChinaGDG.com
回复 支持 反对

使用道具 举报

3#
发表于 2015-5-26 22:16:45 | 只看该作者
刷新前的 终于搞出来了,虽然还是有些东西不懂,但是进步了许多,慢慢来!
ChinaGDG.com
回复 支持 反对

使用道具 举报

2#
发表于 2015-5-26 21:57:27 | 只看该作者
刷新前的 终于搞出来了,虽然还是有些东西不懂,但是进步了许多,慢慢来!
ChinaGDG.com
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表