描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302509004
本书通过简洁的语言和详细的步骤,帮助读者迅速掌握开发Android应用程序所需的基础知识,适合有一定编程经验的读者阅读。书中附有实例与练习。本书可作为高等学校教材,也可供从事Android项目开发的人员参考。
1.1Android应用开发的历史与现状1
1.2Android应用基本架构2
1.2.1Android系统介绍2
1.2.2Android平台架构及特性3
1.3Android应用开发的特点4
1.3.1Android应用的组成4
1.3.2Android堆栈管理5
1.3.3Android生命周期6
1.3.4Android布局管理8
1.3.5Activity交互8
1.3.6SQLite9
1.3.7Android实际开发经验分享9
1.4Android开发工具简介9
1.4.1下载和安装JDK9
1.4.2安装Eclipse12
1.4.3安装ADT插件12
1.5知识点与技能回顾16
1.6练习16
第2章为开发做好准备17
2.1手机客户端准备17
2.2网络环境准备17
2.3服务器准备17
2.3.1安装并配置Tomcat17
2.3.2安装并配置MySQL19
2.3.3Navicat的安装和使用282.4知识点与技能回顾30
2.5练习30
第3章MeDemo项目介绍31
3.1项目背景31
3.2项目需求分析31
3.3项目用例分析31
3.4项目流程33
3.5项目数据库35
3.6项目时序图35
◆Android项目开发教程目录第4章用户注册37
4.1用户注册总体设计37
4.2数据库的准备38
4.3用户注册重要知识点详解39
4.3.1Android项目目录结构39
4.3.2xml布局文件的创建40
4.3.3Activity的创建50
4.3.4dimen资源文件55
4.3.5drawable资源文件56
4.3.6客户端与服务器的交互57
4.4用户注册57
4.4.1用户注册的具体实现57
4.4.2几个关键的类71
4.4.3AndroidManifest.xml76
4.5用户注册功能的调试78
4.6知识点回顾与技能扩展79
4.6.1知识点回顾79
4.6.2技能扩展79
4.7练习85
第5章用户登录86
5.1用户登录总体设计86
5.2用户登录的实现87
5.2.1登录的具体实现87
5.2.2客户端与服务器的交互93
5.2.3后台服务接口文档94
5.3用户登录的调试94
5.4支持用户使用第三方账号登录95
5.4.1什么是第三方登录95
5.4.2第三方账号登录方式95
5.4.3使用第三方账号登录95
5.5知识点回顾与技能扩展96
5.5.1知识点回顾96
5.5.2技能扩展96
5.6练习107
第6章向用户展示内容108
6.1基本内容展示总体设计108
6.2数据库准备109
6.2.1数据库商户109
6.2.2数据库商户表109
6.2.3后台服务端接口文档110
6.3内容展示知识点详解112
6.3.1Fragment介绍112
6.3.2FragmentManage介绍115
6.3.3FragmentTransaction介绍115
6.4内容展示116
6.4.1内容展示的具体实现116
6.4.2客户端和服务端交互132
6.5知识点回顾与技能扩展133
6.5.1知识点回顾133
6.5.2技能扩展133
6.6练习146
第7章支持用户基于LBS的应用147
7.1用户定位147
7.1.1LBS与常见第三方地图服务简介147
7.1.2在地图上找到自己148
7.2摇一摇158
7.2.1摇一摇功能的实现158
7.2.2传感器介绍161
7.3知识点回顾162
7.4练习163
第8章用户搜索与结果展示164
8.1用户搜索功能总体设计164
8.2用户搜索功能知识点详解165
8.3用户搜索的实现167
8.4知识点回顾177
8.5练习177
第9章与用户互动178
9.1让用户参与评价178
9.1.1用户发表评价的界面178
9.1.2用户发表评价179
9.1.3商户的评价列表展示190
9.2让用户分享191
9.2.1什么是分享191
9.2.2让用户将内容分享到社交平台191
9.3给用户推送消息197
9.3.1推送的几种常见解决方案197
9.3.2常用的推送平台197
9.4知识点回顾209
9.5练习209
第10章添加商户信息210
10.1添加商户信息总体设计210
10.2商户数据库准备211
10.3Intent详解211
10.4添加商户信息流程控制214
10.5知识点回顾与技能扩展224
10.5.1知识点回顾224
10.5.2技能扩展224
第11章让用户使用体验更佳234
11.1用户手机网络环境234
11.2知识点回顾235
第12章发布和管理Android应用236
12.1为何要发布236
12.2在哪里发布236
12.3如何发布到第三方市场236
12.3.1在Eclipse中对Android应用签名236
12.3.2发布APK到第三方市场240
12.4版本与版本管理243
12.4.1设置版本号和版本名243
12.4.2获取当前版本信息243
12.5如何让用户升级243
12.5.1服务器准备243
12.5.2客户端实现244
12.6知识点回顾252
第13章与用户终端设备无关的HTML 5253
13.1什么是HTML 5253
13.1.1综述253
13.1.2发展历史253
13.1.3特性254
13.1.4未来趋势255
13.2用HTML 5实现内容展示257
13.2.1WebView组件257
13.2.2HTML 5本地存储260
13.2.3HTML 5的地理位置服务264
附录AAndroidManifest.xml中的权限266
附录BIntent和Action汇总269
参考文献275
1. 本书讲解的主要内容
本书重点讲解Android系统功能模块涉及的主要知识点,并通过技能扩展讲解常用的实用技能。本书的项目原型是公司电子商务的基础版本,有助于读者了解一个真实项目的整个开发流程。全书共13章。其中,第1~3章介绍Android的历史、现状及书中项目的背景;第4~11章介绍项目的主要功能模块和重要知识点;第12~13章介绍如何发布Android应用,并介绍HTML 5的基础知识。
2. 本书适合的读者
首先,要求读者具备Java语言的基础知识;其次,要理解书中讲到的知识点。“好记性不如烂笔头”,只有不断练习,才能把学到的知识变成自己的能力。
在学习项目开发的时候,可以边学、边练,这样在学习完成后就可具有一定的项目实践经验,而不是仅了解一些空洞的、概念的东西。具有一定的基础后,可尝试阅读API开发文档、项目源码及Android的系统源码,这对于Android的学习是非常重要的。在学习与实践的过程中,不知不觉,编程就会变成一件快乐的事情。
编者
用 户 登 录5.1用户登录总体设计
登录时序如图5.1所示。
图5.1登录时序登录流程如图5.2所示。
图5.2登录流程
◆Android项目开发教程第◆5章用户登录5.2用户登录的实现[4/5]5.2.1登录的具体实现[2]1. 登录界面效果及实现登录界面如图5.3所示。
图5.3登录界面
顶部布局: top_layout_login_activity.xml。代码如下:
android:layout_width=”match_parent”
android:layout_height=”@dimen/action_bar_default_height”
android:background=”@drawable/top_layout_supplier_action_bar” >
android:id=”@ id/text_top_layout_right”
android:layout_width=”@dimen/action_bar_default_height”
android:layout_height=”match_parent”
android:layout_alignParentRight=”true”
android:gravity=”center_vertical|center_horizontal”
android:text=”@string/register_”
android:textColor=”@android:color/holo_blue_dark”
android:textSize=”@dimen/text_size_20″
android:textStyle=”bold” />
android:id=”@ id/image_top_layout_left”
android:layout_width=”@dimen/action_bar_default_height”
android:layout_height=”match_parent”
android:layout_alignParentLeft=”true”
android:contentDescription=”@string/app_name”
android:padding=”8dip”
android:src=”@drawable/icon_back” />
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_toLeftOf=”@id/text_top_layout_right”
android:layout_toRightOf=”@id/image_top_layout_left”
android:orientation=”vertical” >
android:id=”@ id/text_top_title”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_centerInParent=”true”
android:gravity=”center_horizontal”
android:text=”@string/login”
android:textSize=”@dimen/text_size_18″ />
页面布局: activity_login.xml。代码如下:
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:background=”@color/white”
android:orientation=”vertical”
tools:context=”com.me.demo.fragment.LoginFragment” >
android:layout_width=”match_parent”
android:layout_height=”@dimen/action_bar_default_height”
layout=”@layout/top_layout_login_activity” />
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_margin=”10dp”
android:padding=”5dp” >
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/user_name”
android:textSize=”@dimen/text_size_18″ />
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:background=”@null”
android:hint=”@string/user_name_tips” />
android:layout_width=”match_parent”
android:layout_height=”1dp”
android:layout_marginBottom=”5dp”
android:layout_marginLeft=”10dp”
android:layout_marginRight=”10dp”
android:layout_marginTop=”5dp”
android:background=”@android:color/darker_gray” />
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_margin=”10dp”
android:orientation=”horizontal”
android:padding=”5dp” >
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/password”
android:textSize=”@dimen/text_size_18″ />
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:background=”@null”
android:hint=”@string/password_tips” >
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_margin=”10dp”
android:background=”@drawable/bkg_button”
android:padding=”10dp”
android:text=”@string/login”
android:textColor=”@color/white”
android:textSize=”@dimen/text_size_20″ />
2. 登录流程控制
1) LoginActivity类图
LoginActivity.java类图如图5.4所示。
图5.4LoginActivity.java类图
2) 组件监听事件
LoginActivity监听用户单击登录按钮的操作。
LoginActivity实现android.view.View.OnClickListener接口,这是单击事件监听的接口。public class LoginActivity extends BaseActivity implements OnClickListener重写run方法,v.getId()将获得组件的id值。代码如下:@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button_login:
login();
break;
default:
break;
}
}登录按钮设置单击监听事件,代码如下:findViewById(R.id.button_login).setOnClickListener(this);3) 获取登录相关的数据信息
单击登录按钮后,执行login()方法。代码如下:private void login()
{
//检查用户名格式
EditText userNameEdit = (EditText) findViewById(R.id.edit_username_login);
userName = userNameEdit.getText() “”;
if (!userName.trim().matches(“^[a-zA-Z0-9_][a-zA-Z0-9_]{3,10}$”))
{
WidgetTools.setTVError(userNameEdit, this.getResources().getString(R.string.toast_user_name_tips), this);
return;
}
//检查密码格式
EditText passwordEdit = (EditText) findViewById(R.id.edit_password_login);
password = passwordEdit.getText() “”;
if (!password.trim().matches(“^[\\@A-Za-z0-9\\!\\#\\$\\%\\^\\&\\\\.\\~]{5,22}$”))
{
WidgetTools.setTVError(passwordEdit, getResources().getString(R.string.toast_user_password_tips), this);
return;
}
sendMessage(OPT.USER_LOGIN);
}4) 封装登录信息
封装登录信息到JSON,为了提高用户的体验,我们在请求接口时,progressDialog提示用户正在请求服务器。代码如下:@Override
public void sendMessage(int opt)
{
progressDialog.show();
message = mHandler.obtainMessage();
param = new JSONObject();
try
{
switch (opt)
{
case OPT.USER_LOGIN:
param.put(“act”, “login”);
param.put(“username”, userName);
param.put(“password”, password);
break;
}
} catch (JSONException e)
{
e.printStackTrace();
}
super.sendMessage(opt);
}5) 传递登录信息
传递登录信息与注册流程相同。经过BaseActivity传递信息到BaseHandler,再传递到Mehread,调用run()方法,执行userLogin方法。代码如下:private void userLogin()
{
try
{
String mianurl = API_URL “user.php”;
HttpPost httpPost = new HttpPost(mianurl);
MultipartEntity mulentity = Tools.json2MultipartEntity(mData);
httpPost.setEntity(mulentity);
String builder = Tools.sendMsg(httpPost);
if (builder == null)
{
sendException(TIPS_GET_DATA_FAIL);
return;
}
JSONObject object = new JSONObject(builder);
if (object != null)
{
int flag = object.getInt(“flag”);
if (flag == 1)
{
JSONObject user_result = (JSONObject) object.get(“userInfo”);
UserBean userBean = (UserBean) BeanFactory.json2Bean(user_
result, UserBean.class);
sendHandlerMsg(-OPT.USER_LOGIN, userBean);
} else
{
String message;
if (object.has(“msg”))
{
message = object.getString(“msg”);
} else
{
message = “”;
}
sendException(message);
}
}
} catch (JSONException e1)
{
sendException(TIPS_GET_DATA_FAIL);
e1.printStackTrace();
}
}6) 注册LoginActivity
在Manifest.xml中注册LoginActivity。代码如下:5.2.2客户端与服务器的交互
将数据封装到JSON对象中。代码如下:param.put(“act”, “login”);
param.put(“username”, userName);
param.put(“password”, password);服务端返回JSON String解析放到javabean文件UserBean.java中。代码如下:package com.me.demo.bean;
public class UserBean
{
public String id;
public String username;
public String password;
}5.2.3后台服务接口文档
接口地址: http://localhost: 8080/meServer/user.php。
调用方式: POST。
登录接口参数如表5.1所示。表5.1登录接口参数请求参数必选类型及范围说明actYStringloginusernameYString用户名passwordYString密码返回方式: JSON。
调用示例: http://localhost: 8080/meServer/user.php?act=login&username=123&password=321。
登录接口返回JSON数据如表5.2所示。表5.2登录接口返回JSON数据返回值字段字 段 类 型字 段 说 明flagInt1成功,0失败msgString消息提示信息userInfoJSONObject用户信息Json数据idString用户idpasswordString用户密码usernameString用户名5.3用户登录的调试
(1) 准备工作请参照4.7节。
(2) 若登录成功,则Toast提示登录成功,否则提示登录失败。
5.4支持用户使用第三方账号登录[4/5]5.4.1什么是第三方登录第三方登录就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。这里的第三方平台,一般是已经有大量用户的平台,如国内的新浪微博、QQ,国外的Facebook、Twitter等。第三方登录不是一个具体的接口,而是一种思想或者一套步骤。
要实现第三方登录,首先需要选择一个第三方平台。新浪微博和QQ空间都是好的选择。这些平台拥有大量的用户,而且还开放了API,供我们调用接入。但是同样开放API,微信却不是一个好选择,这是因为微信的API只支持分享,不支持授权验证或者获取用户资料。因此要实现第三方登录,所选择的平台至少需要具备以下特性:
(1) 开放API。
(2) 可获取用户资料或至少可进行授权验证。
ShareSDK已经支持了超过20种这样的平台,完全足够选择使用。
5.4.2第三方账号登录方式
选择好平台后,现在思考的问题是: 你的应用是否具备独立账户系统?
这个问题是第三方登录时接口选择的重要标准。如果选择“是”,则意味着应用只是需要第三方平台的用户,而不是其账户验证功能——也就是“要数据,不要功能”。如果选择“否”,则表示实际上是“要功能,不要数据(用户)”。对于ShareSDK来说,前者的入口方法是showUser(null),而后者的入口方法是authorize()。它主要有两种接入方式。
(1) 要功能,不要数据。
(2) 要数据,不要功能。
5.4.3使用第三方账号登录[2]1. 要功能,不要数据如果你的应用不具备用户系统,而且也不打算维护这个系统,那么可以依照下面的步骤来做:
(1) 用户触发第三方登录事件。
(2) 调用platform.getDb().getUserId(),请求用户在此平台上的ID。
(3) 如果用户ID存在,则认为该用户是合法用户,允许进入系统;否则调用authorize()。
(4) authorize()方法引导用户在授权页面输入账号、密码,目标平台将验证此用户。
评论
还没有评论。