这是我第一次做和网络相关的程序。虽然之前做过app,但是都没有和网络交互,这次算是从零开始。废话不多说,直接上干货。
开发工具:
- android:android studio
- java web:myEclipse(提取密码:ia8f)各种版本,自选合适版本
- mysql:参考这篇文章进行配置,我尝试了phpMyadmin和mysql
workbench 来管理数据库,个人感觉phpMyadmin用的较为熟练。 - 模拟器:genymotion,强烈推荐这个模拟器,速度快,打开android studio创建的模拟器我要开半个小时!(下载genymotion很顺利,但是下载模拟器十分艰难,具体可以参考本人的这篇文章)
- 服务器:tomcat 7.x 配置方法参考这里
以上环境如果能配置好,基本成功一半。(学习者一定要有耐心,配置环境花个一周我认为很正常)
另外要强调的一点是要有充足的内存。本人是macbook pro 8g内存。如果是其它电脑,建议12g以上内存.
开发流程
其实可以说,要完成这个开发,你要走通3个helloworld:
- android 端的helloworld,代表你的模拟器和android sdk配置完成
- java web的helloworld代表你服务器端配置完成
- 数据库端的helloworld(就是一些select语句,这里为了工整使用helloworld代表)
如果以上信息不会,可以参考android hellowrold程序、java web helloworld程序
android端就是平时我们的手机客户端,java web程序放在服务器上,android与java web交互,获取信息,收到android客户端的信息后,java web向数据库请求信息。具体见下面的流程
接下来描述程序的整体流程
1. android端发出http请求(Get请求或者Post请求,不理解也没关系)
2. 服务器端java web程序接受请求。
3. 服务器端java web程序访问数据库,获得返回结果。
4. 服务器端java web程序将返回结果传输给客户端。
5. 客户端得到结果,显示给客户使用。
以上是最基本的概念,如果读者还没有跑通3个helloworld,请继续配置环境,如果是已经跑通了所有的helloworld但是对android或者java web的程序结构不太清楚可以参考一下文章,如果都已经完成,那么我们就可以开始开发了。
没有必要完全搞懂,一边做一边学习即可。
通讯过程工具+关键代码
到了这一部分,作者认为读者已经了解如何创建android和java web的程序,并且已经有了基本的sql语句的知识(增、删、查、改)。这一部分纷呈两个模块,第一个模块讲述android如何发送请求,第二个模块讲述java web如何接受请求。
使用的包:
- gson(将数据打包成json文件格式、将json解析为对象、在android和java web端都可以使用,此包为谷歌工程师开发,必属精品)
- xutils(此包集结了中国工程师们的智慧,帮助我们极大的简化了网络通讯,代码简化,各种高性能优点)
part one
以下是android端的核心代码,发出一个网络请求,收到查询结果。这是一个登录功能,界面就是两个EditText,当点击登录按钮时发送数据,当访问成功,接收返回数据,在responseInfo.result中,将用户信息存储在sharedPreferce中,并记住登录状态。里面用到了xutils的两个功能
HttpUtils:
send函数* 参数:方法(Post或者Get)、访问的网址、参数、返回
- ViewUtils:
帮助我们方便的找到控件
现在create方法中调用ViewUtils.Inject方法,在定义控件的时候采用注解的写法,就不需要使用findviewbyid了
SharedPerference是我引入的一个工具类,在后面提供工具类的代码。
LoginActivity.java
package com.example.wxc575843.hellotone.start;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.wxc575843.hellotone.Practice.PracticeMain;
import com.example.wxc575843.hellotone.R;
import com.example.wxc575843.hellotone.utils.SharePreferenceUtils;
import com.google.gson.Gson;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.model.Global;
import