Android页面的后台的代码主要写在java目录文件里如下图
Application类贯穿整个程序的生命周期,随着进程的加载对象就创建了,当进程销毁的时候Application类才销毁。在实际开发过程中,可以继承Application类,创建自己的MyApplication类,在类里面可以提供一些变量,数据等等,这些变量与数据在整个生命周期过程中都可以被调用,比如经常要用到的Context,Handler对象可以被当前的Module里的任何类库引用到,而不必在需要用的时候去new对象或者通过构造传入
实现代码:
public classMyAppcliationextendsApplication {
//在整个应用执行的过程中,需要提供的变量
public staticContextcontext;//需要使用的上下文对象
public staticHandlerhandler;//需要使用的Handler
public staticThreadmainThread;//提供主线程对象
public static intmainThreadId;//提供主线程对象的Id
@Override
public voidonCreate() {
super.onCreate();
context=this.getApplicationContext();
handler=newHandler();
mainThread= Thread.currentThread();//实例化Application当前的线程为主线程
mainThreadId= android.os.Process.myTid();//获取当前线程的Id
}
}
下面是实现登录界面的后台代码为例:
- 首先创建好一个类并继承AppCompatActivity,按Ctrl+O键选择onCreate方
法,然后声明两个全局变量:mActivityContext= this; mActivityContext表
示上下文;myApplication= (MyApplication) getApplication();获取
myApplication实现全局(快捷键:Alt+Enter),方便后面调用。
设置布局:setContentView(R.layout.activity_login);
然后获取界面的控件,获取控件后把所有控件全局化(快捷键:ctrl+alt+f
)。
- 如果是主页面则像初始化页面,否则就设置控件事件(方法),接下来就是实现写控件事件的方法:
用上面已经全局化的控件点出setOnClickListener方法,如下:
tvSendSmsCode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
----这里写想要实现的功能-----
}
}
比如里要写个跳转页面的功能,可以如下:
//意图 参数:context,要打开的页面的类.class Intent intent=new Intent(LoginActivity.this,RegisterActivity.class); //打开activity startActivity(intent); finish();
如果是想在里面实现获取页面的数据提交到服务段的功能则如下:
1.用已经全局化的控件点出getText()方法,然后判断所获取到数据是否为空。
2. 发送网络请求——获取请求的url——获取设备id——设置参数(实例化一个HashMap对象集合,然后用put方法把数据放进集合里)。
3. 数据、请求路径都准备好之后,接下来就开始发送请求:用httpPost请求方法请求,传入请求路径和数据集合;用onResponse()回调函数。
4. 解析服务端返回数据,用JSONObject对象来反序列化服务段返回来的数据(因为服务端返回的数据是字符串类型的)。详细代码如下:
//文本按钮--获取验证码 tvSendSmsCode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取手机号 String phone=etPhone.getText()==null?"":etPhone.getText().toString(); if (Tools.isMobile(phone)){ //======发送网络请求 //获取请求的url String url= ServiceUrls.getMemberMethodUrl("SendSmsValid"); //获取设备id String deviceId= DeviceUtils.getDeviceUUID(mActivityContext); //设置参数 Map<String,Object> map=new HashMap<>(); map.put("phone",phone); map.put("deviceId",deviceId); map.put("isRegister",false);//登录设置为false //禁用发送按钮 tvSendSmsCode.setEnabled(false); tvSendSmsCode.setText("发送中..."); //==发送请求 OkHttpTool.httpPost(url, map, new OkHttpTool.ResponseCallback() { @Override public void onResponse(final boolean isSuccess, final int responseCode, final String response, Exception exception) { //更新UI需要在UI线程中执行--只有UI线程才能更新UI mActivityContext.runOnUiThread(new Runnable() { @Override public void run() { String strText="验证码发送失败,请稍后再试"; if (isSuccess && responseCode==200){ //解析服务端返回数据 try { JSONObject jsonObject=new JSONObject(response); int code=jsonObject.getInt("code"); strText=jsonObject.getString("text"); if (code==200){ //重新发送短信倒计时----Android自带倒计时类 倒计时60s,步长1s CountDownTimer timer=new CountDownTimer(60*1000,1000) { //每一步的回调 @Override public void onTick(long millisUntilFinished) { tvSendSmsCode.setText(String.format(Locale.getDefault(),"重新获取(%1$d)",(millisUntilFinished/1000))); } //定时器执行完成的回调 @Override public void onFinish() { tvSendSmsCode.setEnabled(true); tvSendSmsCode.setText("获取验证码"); } }; //启动定时器 timer.start(); }else{ if (code==501){ etPhone.setError(strText); } tvSendSmsCode.setEnabled(true); tvSendSmsCode.setText("获取验证码"); } } catch (JSONException e) { e.printStackTrace(); } } Toast.makeText(mActivityContext,strText,Toast.LENGTH_LONG).show(); } }); } }); }else { etPhone.setError("请输入正确的手机号"); } } });
注意:在客户端和服务端数据传送的参数的大小有区别,因为在客户端里参数的命名规范是:参数所有字母必须是小写,而在服务端里的参数命名规范是:大驼峰命名参数;所以需要在服务端创建实体类来转化参数,详细代码如下:
using Newtonsoft.Json;
namespace HotelService.Entity
{
public class BannerVo
{
[JsonProperty("bannerId")]
public int BannerId { get; set; }
[JsonProperty("bannerTitle")]
public string BannerTitle { get; set; }
[JsonProperty("bannerPicture")]
public string BannerPicture { get; set; }
[JsonProperty("bannerLink")]
public string BannerLink { get; set; }
[JsonProperty("isShow")]
public bool? IsShow { get; set; }
[JsonProperty("isValid")]
public bool? IsValid { get; set; }
}
}