Android之Bmob移动云服务(增删改查)

来源:互联网 发布:户外广告数据 编辑:程序博客网 时间:2024/05/01 02:59

没有口水与汗水,就没有成功的泪水。


本讲内容:Bmob移动云服务


一、Bmob的使用步骤

1在你的项目根目录下创建"libs"目录,将下载的BmobSDK文件中的两个.jar文件放入该目录下。

对于Eclipse工程,请参照下面的步骤添加jar包:

1. 选择你的工程,单击鼠标右键选择“Properties”项

2. 在弹出的窗口中选择“Java Build Path”项

3. 在右侧的主窗体中选择“Libraries”选项卡

4. 点击“Add JARs…”按钮

5. 选择你拷贝到libs目录下的Bmob.jar文件

6. 点击“OK”完成


2、在您的应用程序中添加相应的权限:

  <!-- Bmob SDK权限 -->    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.READ_LOGS" />


3、在你的应用程序启动的ActivityonCreate()方法中初始化Bmob功能

 // 初始化 Bmob SDK ,并将第二个参数appKey替换成你在Bmob服务器端创建的应用key    Bmob.initialize(this, "14fcb34593937578a18862a1b33f29a1");




二、数据对象

Bmob存储的数据是建立在BmobObject基础上的,所以任何要保存的数据对象必须继承自BmobObject类。BmobObject类本身包含objectIdcreatedAtupdatedAtACL四个默认的属性,objectId是数据的唯一标示,相当于表的主键,createdAt是数据的创建时间,updatedAt是数据的最后修改时间,ACL是数据的操作权限。

如,你的游戏中使用GameScore表来记录玩家的比分信息,其中表的字段有:score(分数)、playerName(玩家名字)、isPay(是否付费玩家)、pic(玩家头像)属性,那么这个数据对象如下定义:

//必须要继承自BmobObject类public class GameScore extends BmobObject{    private String playerName;    private Integer score;    private Boolean isPay;    private BmobFile pic;    public String getPlayerName() {        return playerName;    }    public void setPlayerName(String playerName) {        this.playerName = playerName;    }    public Integer getScore() {        return score;    }    public void setScore(Integer score) {        this.score = score;    }    public Boolean getIsPay() {        return isPay;    }    public void setIsPay(Boolean isPay) {        this. isPay = isPay;    }   public BmobFile getPic() {        return pic;    }    public void setPic(BmobFile pic) {        this.pic = pic;    }}

需要注意的是:

  • JavaBean不需要对objectIdcreatedAtupdatedAtACL四个属性进行定义。
  • 不少开发者会没有注意到createdAtupdatedAt属性中的字母d,写成createAt和updateAt。
  • 尽可能使用Integer、Boolean,而不是int、boolean,也就是选择包装类,而不是使用基本数据类型

三、数据类型

目前为止,我们支持的数据类型有String、Integer、Boolean、ArrayList以及BmobObject对象类型。同时Bmob也支持BmobDate、BmobGeoPoint、BmobFile数据类型。


示例一:Bmob 增删改查


下面是res/layout/activity_main.xml 布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ListView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:cacheColorHint="#00000000"        android:listSelector="@drawable/selector_list_item" /></RelativeLayout>

下面是res/layout/list_item.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/tv_item"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center_vertical"    android:minHeight="56dp"    android:paddingLeft="20dp"    android:textSize="16sp" ></TextView>

下面是res/drawable/selector_list_item文件

<?xml version="1.0" encoding="utf-8"?>  <selector xmlns:android="http://schemas.android.com/apk/res/android">        <item android:state_pressed="true"><shape>              <solid android:color="@color/white" />          </shape></item>      <item android:state_focused="true"><shape>              <solid android:color="@color/white" />          </shape></item>      <item android:state_selected="true"><shape>              <solid android:color="@color/white" />          </shape></item>      <item><shape>              <solid android:color="@color/ivory" />          </shape></item>    </selector>  

下面是res/values/strings.xml 布局文件:

 <string-array name="crud_list">        <item>1. 创建数据</item>        <item>2. 更新数据</item>        <item>3. 删除数据</item>        <item>4. 查询数据</item>    </string-array>

下面是BaseActivity.java文件:

/**  * 设置activity的基础类  * 变量可以在这里设置  *  */  public class BaseActivity extends Activity {      public static String TAG="tag";      protected ListView mListview;      protected BaseAdapter mAdapter;            protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);      }            public void toast(String msg){          Toast.makeText(this, msg, Toast.LENGTH_LONG).show();          Log.d(TAG, msg);      }  }

下面是Person.java文件:

/** * 创建表 * 表名默认是与类名相同(如果服务器端不存在Person表,那么系统将自动建表) */public class Person extends BmobObject {private String name;private Integer age;private Boolean gender;private String address;private String email;private List<String> hobby; // 对应服务端Array类型private BmobFile pic; // 玩家头像private BmobGeoPoint gpsAdd; // 地理位置信息private BmobDate uploadTime;private MyUser myUser;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Boolean getGender() {return gender;}public void setGender(Boolean gender) {this.gender = gender;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public List<String> getHobby() {return hobby;}public void setHobby(List<String> hobby) {this.hobby = hobby;}public BmobFile getPic() {return pic;}public void setPic(BmobFile pic) {this.pic = pic;}public BmobGeoPoint getGpsAdd() {return gpsAdd;}public void setGpsAdd(BmobGeoPoint gpsAdd) {this.gpsAdd = gpsAdd;}public BmobDate getUploadTime() {return uploadTime;}public void setUploadTime(BmobDate uploadTime) {this.uploadTime = uploadTime;}public MyUser getMyUser() {return myUser;}public void setMyUser(MyUser myUser) {this.myUser = myUser;}}

下面是CRUDActivity.java主界面文件:

public class CRUDActivity extends BaseActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListview=(ListView) findViewById(R.id.listview);mAdapter=new ArrayAdapter<String>(this, R.layout.list_item, getResources().getStringArray(R.array.crud_list));mListview.setAdapter(mAdapter);mListview.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {testBmob(position+1);}});}private void testBmob(int position) {switch (position) {case 1:testinsertObject();break;case 2:testUpdateObject();break;case 3:testDeleteObject();break;case 4:queryOne();break;}}/** * 插入对象 */private void testinsertObject(){final Person p2=new Person();p2.setName("小劲");p2.setAddress("阳江市");p2.setAge(6);//创建一个东经116.39727786183357度,北纬39.913768382429105度的BmobGeoPoint对象:p2.setGpsAdd(new BmobGeoPoint(116.39727786183357, 39.913768382429105));p2.setUploadTime(new BmobDate(new Date()));p2.save(this, new SaveListener() {public void onSuccess() { objectId = p2.getObjectId(); toast("添加数据成功,返回objectId为:"+p2.getObjectId() + ",数据在服务端的创建时间为:" + p2.getCreatedAt());}public void onFailure(int code, String msg) {toast("创建数据失败:" + msg);}});}/** * 更新对象 * 注意:修改数据只能通过objectId来修改,目前不提供查询条件方式的修改方法。 */private void testUpdateObject(){final Person p2=new Person();p2.setAddress("阳西县");p2.setAge(23);p2.update(this,objectId, new UpdateListener() {public void onSuccess() {toast("更新成功:" + p2.getUpdatedAt());}public void onFailure(int code, String msg) {toast("更新失败:" + msg);}});}/** * 删除对象 */private void testDeleteObject(){final Person p2=new Person();p2.setObjectId(objectId);p2.delete(this, new DeleteListener() {public void onSuccess() {toast("删除成功");}public void onFailure(int code, String msg) {toast("删除失败:" + msg);}});}/** * 查询单条数据 * 当我们知道某条数据的objectId时,就可以根据objectId直接获取单条数据对象。 */private void queryOne(){BmobQuery<Person> query=new BmobQuery<Person>();query.getObject(this, objectId, new GetListener<Person>() {public void onSuccess(Person object) {toast("查询成功:"+object.getName()+"\t"+object.getAddress());}public void onFailure(int code, String msg) { toast("查询失败:"+msg);}});}}


在AndroidMainfest.xml文件

<!-- Bmob SDK权限 -->    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.READ_LOGS" />



Take your time and enjoy it 要原码的、路过的、学习过的请留个言,顶个呗~~
5 0