论坛首页 移动开发技术论坛

手把手全程教你开发Android应用——的哥宝贝三(功能实现篇1)

浏览 4157 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-25  
<!-- .entry-meta -->

 

<!-- .entry-header -->

手把手全程教你开发Android应用

的哥宝贝(功能实现篇)

      上一篇UI篇介绍了页面跳转特效、导航以及地图功能的UI设计,现在给大家介绍如何使用Bmob来开发的哥宝贝的功能。

 

身份选择:

(MainActivity)

打开应用首先进入身份选择页面,选择角色后,向数据库添加用户信息记录,用户的ID为用户手机的Android ID。添加用户信息的时候使用BmobSDKBmob的云端服务器添加数据。实现方法如下:

/**

      * 添加用户信息

      *

      * @param context

      */

     public static void insertUserInfo(final Context context, final int identity) {

 

         final String devicId = getDeviceID(context);

         final BmobObject object = new BmobObject(USERINFO);

         BmobQuery query = new BmobQuery(USERINFO);

         query.whereEqualTo(USER_ID, devicId);

         query.findInBackground(new FindCallback() {

 

              @Override

              public void done(List<BmobObject> arg0, BmobException arg1) {

                   if (arg1 != null) {

                       // 查询失败

//BmobException arg1为查询发生异常的回调信息,如果arg1不为空

                       //证明查询失败

                       Log.i(“bmob”, “查询用户信息失败: ” + arg1.toString());

                      

                   } else {

                       if (0 != arg0.size()) {

                            // 用户信息存在

// arg0为查询成功的时候,返回所有符合查询条件的BmobObject集合

//类型为List<BmobObject>,查看该集合的大小便可知道是否存在需要查询的数据

                            Log.i(“bmob”, “用户信息存在”);

                            SharedPreferences mPrefs = context.getSharedPreferences(“taxibaby_data”, context.MODE_PRIVATE);

                            mPrefs.edit().putString(“objectId”, arg0.get(0).getObjectId()).commit();

                            TaxiBabyService.actionStart((Activity) context);   //启动上传位置服务

                       } else {

                            // 用户信息不存在,进行第一次插入

                            //插入数据时,先实例化

                            // final BmobObject object = new BmobObject(USERINFO);

                            //如果没有这个表,初始调用方法会自动创建一个新的表,列明会按照

                            //列名也会按照代码中插入的自动添加

                            //在下次添加新的列时,再添加一行object.put(“列名”,values);即可

                            object.put(USER_ID, devicId);

                            object.put(BmobDataBase.USER_NAME, “”);

                            object.put(BmobDataBase.USER_PHONE, “”);

                            object.put(USER_IDENTITY, identity);

                            object.saveInBackground(new SaveCallback() {

 

                                 @Override

                                 public void done(BmobException arg0) {

                                     if (arg0 != null) {

                                          Log.i(“bmob”, “添加用户信息失败: “

                                                   + arg0.toString());

                                     } else {

                                          Log.i(“bmob”, “添加用户信息成功”);

                                          Intent intent = new Intent(context,

                                                   UpdatePassengerActivity.class);

                                          intent.putExtra(“userId”, “”);

                                          intent.putExtra(“userName”, “”);

                                          intent.putExtra(“userPhone”, “”);

                                          context.startActivity(intent);

 

                                          TaxiBabyService

                                                   .actionStart((Activity) context);

                                     }

 

                                 }

                            });

                       }

                   }

              }

         });

     }

 

乘客/司机列表查询:

  

          (FindDriverActivity)            (SearchActivity)

查询乘客/司机列表的方法基本上是一致的,以查找乘客为例,具体方法如下:

/**

     * 查询乘客

     */

    private void getData() {

        BmobQuery query = new BmobQuery(BmobDataBase.USERINFO);

//wherEqualTo方法是添加操作条件

        query.whereEqualTo(BmobDataBase.USER_IDENTITY, 2);

        // query.setLimit(100) ;

        query.findInBackground(new FindCallback() {

 

            @Override

            public void done(List<BmobObject> arg0, BmobException arg1) {

                dlist.clear();

                if (arg1 == null && 0 != arg0.size()) {

                    //查询没有异常并且查询数据不为空,返回BmobObject对象的集合

                       //把BmobObject历遍保存在自定义的List<BmobObject> dlist中

                       //不用转换成其他类型,可以直接放进Adapter中进行显示

                    for (BmobObject bmobObject : arg0) {

                        dlist.add(bmobObject);

                    }

                } else {

                    if (arg1 != null) {

                        Log.i(“bmob”, “查询乘客信息失败:” + arg1.toString());

                    }

                    Toast.makeText(SearchActivity.this, “没有数据”,

                            Toast.LENGTH_SHORT).show();

                }

                sendMsg(0);

            }

        });

    }

 

Adapter(适配器)中对dlist的处理

//取出BmobObject的值时,先获取到BmobObject,然后调用getString(“列名”)就可以获取

String addr = dlist.get(arg0).getString(BmobDataBase.USER_ADDR);

 

需要注意一点的是,查询数据的时候,数据返回需要一定的时间,所以数据处理尽量使用线程在后台处理,要不会出现数据输出不正常。

 

个人信息修改:

 

      (DriverInfoEditActivity)

这个是司机的个人信息修改页面,修改方法与insert方法一样,只需要根据用户ID重新插入需要更改的信息,就可以覆盖原来的信息,代码如下:

user.setObjectId(mPrefs.getString(“objectId”, “domob”));

                   user.put(BmobDataBase.USER_NAME, tv_d_editinfo_name.getText()

                            .toString());

                   user.put(BmobDataBase.USER_PHONE, tv_d_editinfo_phone.getText()

                            .toString());

                   user.put(BmobDataBase.USER_SERVEAREA, tv_d_editinfo_addr

                            .getText().toString());

                   user.put(BmobDataBase.USER_SERVEDATE, tv_d_editinfo_time

                            .getText().toString());

                   user.put(BmobDataBase.USER_IDENTITY, 1);

                   if (rb_d_editinfo_sex_mail.isChecked()) {

                       user.put(BmobDataBase.USER_SEX, “男”);

                   } else {

                       user.put(BmobDataBase.USER_SEX, “女”);

                   }

                   user.saveInBackground(new SaveCallback() {

                       @Override

                       public void done(BmobException paramBmobException) {

                            if (paramBmobException == null) {

                                 Toast.makeText(DriverInfoEditActivity.this,

                                          保存成功^_^”, Toast.LENGTH_SHORT).show();

                            } else {

                                 // 更新失败

                                 Toast.makeText(DriverInfoEditActivity.this,

                                          保存失败 =_=!”, Toast.LENGTH_SHORT).show();

                            }

                       }

                   });

 

数据删除:

 

      (SaveRateActivity)

数据的删除操作,在乘客页面内的评分满意度中有这个功能,当乘客对未评分司机评分保存的时候,需要把未评分司机表中,刚刚评分的司机信息删除,先根据用户ID,被评分的司机ID查询出需要删除的行(可以说是对象)BmobObject,然后调用BmobObjectdelect()方法。

/**

      * 评分后删除该用户当前以评分司机在未评分司机的数据

      */

     private void deleteNotRate(){

         BmobQuery query = new BmobQuery(BmobDataBase.NOT_RATE_INFO);

//查询当前用户的未评分司机

         query.whereEqualTo(BmobDataBase.NOT_RATE_USERID, userId);

//查询当前用户的未评分司机中需要删除未评分记录的司机信息

         query.whereEqualTo(BmobDataBase.NOT_RATE_DRIVERID, driverId);

         try {

              List<BmobObject> objs = query.find();

              if(null != objs && objs.size() > 0){

         //objs是查询到的数据集合

但实际只有一条,所以只需要对集合的第一个对象进行删除操作就可以了

                   objs.get(0).delete();

              }

         } catch (BmobException e) {

              Log.i(BmobDataBase.TAG, “删除时未评分数据时出错”);

              e.printStackTrace();

         }

     }

 

 

 

 

   发表时间:2012-04-25  
感谢分享!
0 请登录后投票
   发表时间:2012-04-26  
想看看DriverHomeActivity的布局是怎么样的
0 请登录后投票
   发表时间:2012-04-27  
嗯,不错的,支持等待你后面的教程!
0 请登录后投票
   发表时间:2012-04-30  
我挺想知道 那个摇一摇就能摇出 附近的司机的操作这个是怎么实现的
0 请登录后投票
   发表时间:2012-06-07  
我们公司做了一个这个  先看看你的如何
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics