Windows Azure之Mobile Service
我建个android app和Windows Azure的Mobile Service配合,以实现会员注册的功能,实际十分简单,微软家的东西真心好用
首先新建个Mobile Service
New->Mobile Service->Create之后弹出下图的对话框
URL就自定义一个,如果有人注册了会报错,换个就好,database新建还是使用已存在的都可以,新建之后会多一步让你输入要新建的数据库的名称和密码,backend就选Javascript,点击箭头下一步
使用现存的会让你输入密码,建立完成,点击主界面左侧的Mobile service,出现下图
我这里选“连接一个已存在的android app”,其实现在下面微软的教程就放在那里了
在自己的android app中确保build.gradle(project:你自己的工程名)里面有:
repositories {
jcenter()
}
build.gradle(project:Model:app)中添加windows azure sdk,就是把这几句添加到dependencies里去:
compile 'com.google.code.gson:gson:2.3' compile 'com.google.guava:guava:18.0' compile 'com.microsoft.azure:azure-mobile-services-android-sdk:2.0.3' compile (group: 'com.microsoft.azure', name: 'azure-notifications-handler', version: '1.0.1', ext: 'jar')
在自己的实现MobileService功能代码中添加:
private MobileServiceClient mClient;
private ProgressBar mprogressBar;
try { mClient=new MobileServiceClient("你的URL", "你的KEY", this).withFilter(new ProgressFilter()); mStudentTable=mClient.getTable(Student.class); } catch (MalformedURLException e) { e.printStackTrace(); createAndShowDialog(new Exception("移动服务发生错误,检查URL和Key试试"), "Error"); }
private class ProgressFilter implements ServiceFilter { @Override public ListenableFuture<ServiceFilterResponse> handleRequest( ServiceFilterRequest request, NextServiceFilterCallback next) { runOnUiThread(new Runnable() { @Override public void run() { if (mprogressBar != null) mprogressBar.setVisibility(ProgressBar.VISIBLE); } }); SettableFuture<ServiceFilterResponse> result = SettableFuture.create(); try { ServiceFilterResponse response = next.onNext(request).get(); result.set(response); } catch (Exception exc) { result.setException(exc); } dismissProgressBar(); return result; } }
private void dismissProgressBar() { runOnUiThread(new Runnable() { @Override public void run() { if (mprogressBar != null) mprogressBar.setVisibility(ProgressBar.GONE); } }); }
上面代码中的“你的URL”和“你的KEY”替换成你自己新建的Mobile Service的URL和KEY,其实在现在向导里面有的,没有单击上面的“DASHBOARD”,你的URL和key如图
关于KEY,点击MANAGE KEYS,等一秒,复制那个Application key。
接下来,定义那个要传送的实体类Student
import com.google.gson.annotations.SerializedName; import java.util.Objects; /** * Created by chen on 2015/9/19. */ public class Student { @SerializedName("id") private String mID; @SerializedName("stuid") private String mStuID; @SerializedName("name") private String mName; @SerializedName("sex") private String mSex; @SerializedName("qq") private String mQQ; //Constructor public Student(){ } public Student(String id,String stuid,String name,String sex){ this.setID(id); this.setStuID(stuid); this.setName(name); this.setSex(sex); } public void setID(String id) { this.mID = id; } public void setName(String name) { this.mName=name; } public void setSex(String sex) { this.mSex = sex; } public void setStuID(String stuID) { this.mStuID = stuID; } public void setStuQQ(String stuQQ){this.mQQ=stuQQ;} @Override public String toString(){return getName();} public String getName(){return mName;} public String getID(){return mID;} public String getStuID(){return mName;} public String getSex(){return mSex;} }
注意:实体类中类似@SerializedName("id")里面的“id”要和接下在azure管理中定义的Column名字一致,官方文档中说,只要一致mobile service就会自己解析json并将其对应存储到数据库中。
下面就定义数据库,如图,在azure的管理界面上,如图点DATA,选自己的数据库,新建张表,表中的Column要和上面的实体类一致,最终的效果应该这样
运行安卓客户端,success!