|
1 | 1 | android-app
|
2 |
| -=========== |
| 2 | +=========== |
3 | 3 |
|
4 |
| -OSCHINA 的 Android 客户端源码 |
| 4 | +# **开源中国社区 Android 客户端项目简析** # |
| 5 | + |
| 6 | +*注:本文假设你已经有Android开发环境* |
| 7 | + |
| 8 | +启动Eclipse,点击菜单并导入Android客户端项目,请确保你当前的Android SDK是最新版。<br> |
| 9 | +如果编译出错,请修改项目根目录下的 project.properties 文件。<br> |
| 10 | +推荐使用Android 4.0 以上版本的SDK: |
| 11 | + |
| 12 | +> target=android-15 |
| 13 | +
|
| 14 | +**本项目采用 GPL 授权协议,欢迎大家在这个基础上进行改进,并与大家分享。** |
| 15 | + |
| 16 | +下面将简单的解析下项目: |
| 17 | + |
| 18 | +## **一、项目的目录结构** ## |
| 19 | +> 根目录<br> |
| 20 | +> ├ src<br> |
| 21 | +> ├ libs<br> |
| 22 | +> ├ res<br> |
| 23 | +> ├ AndroidManifest.xml<br> |
| 24 | +> ├ LICENSE.txt<br> |
| 25 | +> ├ proguard.cfg<br> |
| 26 | +> └ project.properties<br> |
| 27 | +
|
| 28 | +**1、src目录**<br> |
| 29 | +src目录用于存放项目的包及java源码文件。 |
| 30 | + |
| 31 | +下面是src目录的子目录: |
| 32 | +> src<br> |
| 33 | +> ├ com.weibo.net<br> |
| 34 | +> ├ greendroid.widget<br> |
| 35 | +> ├ net.oschina.app<br> |
| 36 | +> ├ net.oschina.app.adapter<br> |
| 37 | +> ├ net.oschina.app.api<br> |
| 38 | +> ├ net.oschina.app.bean<br> |
| 39 | +> ├ net.oschina.app.common<br> |
| 40 | +> ├ net.oschina.app.ui<br> |
| 41 | +> └ net.oschina.app.widget<br> |
| 42 | +
|
| 43 | +- com.weibo.net — 新浪微博SDK源码包 |
| 44 | +- greendroid.widget — 快捷菜单栏组件(国外UI库[GreenDroid](http://www.oschina.net/p/greendroid)) |
| 45 | +- net.oschina.app — APP启动及管理包 |
| 46 | +- net.oschina.app.adapter — APP列表适配器包 |
| 47 | +- net.oschina.app.api — API访问包 |
| 48 | +- net.oschina.app.bean — APP实体包 |
| 49 | +- net.oschina.app.common — APP工具包 |
| 50 | +- net.oschina.app.ui — APP界面包 |
| 51 | +- net.oschina.app.widget — APP控件包 |
| 52 | + |
| 53 | + |
| 54 | +**2、libs目录**<br> |
| 55 | +libs目录用于存放项目引用到的jar包文件。 |
| 56 | + |
| 57 | +下面是libs目录里的jar包文件: |
| 58 | +> libs<br> |
| 59 | +> └ commons-httpclient-3.1.jar<br> |
| 60 | +
|
| 61 | +- commons-httpclient-3.1.jar — Apache的HttpClient包 |
| 62 | + |
| 63 | +**3、res目录**<br> |
| 64 | +res目录用于存放项目的图片、布局、样式等资源文件。 |
| 65 | + |
| 66 | +下面是res目录的子目录: |
| 67 | +> res<br> |
| 68 | +> ├ anim<br> |
| 69 | +> ├ color<br> |
| 70 | +> ├ drawable<br> |
| 71 | +> ├ drawable-hdpi<br> |
| 72 | +> ├ drawable-ldpi<br> |
| 73 | +> ├ drawable-mdpi<br> |
| 74 | +> ├ layout<br> |
| 75 | +> ├ menu<br> |
| 76 | +> ├ raw<br> |
| 77 | +> ├ values<br> |
| 78 | +> └ xml<br> |
| 79 | +
|
| 80 | +- anim — 动画效果 |
| 81 | +- color — 颜色 |
| 82 | +- drawable/drawable-hdpi/drawable-ldpi/drawable-mdpi — 图标、图片 |
| 83 | +- layout — 界面布局 |
| 84 | +- menu — 菜单 |
| 85 | +- raw — 通知音 |
| 86 | +- values — 语言包和样式 |
| 87 | +- xml — 系统设置 |
| 88 | + |
| 89 | +**4、AndroidManifest.xml**<br> |
| 90 | +AndroidManifest.xml用于设置应用程序的版本、主题、用户权限及注册Activity等。 |
| 91 | + |
| 92 | +## **二、项目的功能流程** ## |
| 93 | + |
| 94 | +#### 1、APP启动流程 #### |
| 95 | +AndroidManifest.xml注册的启动界面为"AppStart",具体文件为net.oschina.app\AppStart.java文件。启动显示欢迎界面之后,通过意图(Intent)跳转到首页(net.oschina.app.ui\Main.java)。<br> |
| 96 | +*注:除启动界面之外,其他所有界面都放在src\net.oschina.app.ui包中。* |
| 97 | + |
| 98 | +#### 2、APP访问API流程 #### |
| 99 | + |
| 100 | +以首页资讯列表显示访问API数据为例: |
| 101 | + |
| 102 | +**1) 初始化控件**<br> |
| 103 | +首页Activity(Main.java)在onCreate()方法里面加载布局文件(Main.xml),对下拉刷新列表控件(PullToRefreshListView)进行了初始化,并设置了数据适配器(ListViewNewsAdapter)。<br> |
| 104 | +*注:Main.xml布局文件在res\layout目录下;PullToRefreshListView控件在net.oschina.app.widget包;ListViewNewsAdapter适配器在net.oschina.app.adapter包。* |
| 105 | + |
| 106 | +**2) 异步线程访问**<br> |
| 107 | +列表控件初始化后,开启一个线程方法(loadLvNewsData()),该方法中调用全局应用程序类(AppContext)来访问API客户端类(ApiClient)。通过ApiClient以http方式请求服务器的API。返回响应的XML数据,再通过实体Bean(NewsList)解析XML,返回实体(NewsList)给UI控件(PullToRefreshListView)展示。<br> |
| 108 | +*注:AppContext全局应用程序类在net.oschina.app包;ApiClient API客户端类在net.oschina.app.api包。* |
| 109 | + |
| 110 | +**3) 解析数据显示**<br> |
| 111 | +服务得到请求,将返回对应的资讯XML数据,再通过资讯实体类(NewsList)解析XML,返回实体(NewsList)给UI控件(PullToRefreshListView)展示。<br> |
| 112 | +*注:NewsList实体类在net.oschina.app.bean包。* |
0 commit comments