Bmob的使用案例

一、Bmob简介

(1)数据服务

支持丰富的数据类型,灵活方便的增删改查,可视化的数据操作,安全的角色和ACL管理,多表关联处理,数据的批量处理,本地数据缓存,开发者们无需关注服务器后端,就可以实现多平台的同步开发。

(2)文件服务

文件服务允许上传任何的文件类型,支持分片断点续传,此外,针对移动端对图片业务的需求,还提供了生成高压缩比的缩略图服务。

(3)推送服务

提供了Android和iOS两个版本的推送服务,采用Websocket保持长连接,稳定性更好,目前,64GB的单机能够支撑600万的用户长连接。

(4)扩展服务

提供APP官网、计划任务、地理位置、云端代码等扩展服务,确保您的个性化业务逻辑能够在云端更好的运转。

关于Bmob的使用请参考官网:http://docs.bmob.cn/android/faststart/index.html?menukey=fast_start&key=start_android

二、项目案例

Feedback.java

package com.lc.bombtest.bean;

import cn.bmob.v3.BmobObject;

/**
 * 反馈信息的JavaBean
 *
 *
 * 对应的是数据库中一张表
 *
 * 要继承BmobObject
 *
 * @author xuliugen
 *
 */
public class Feedback extends BmobObject {
    private String name;
    private String feedback;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFeedback() {
        return feedback;
    }

    public void setFeedback(String feedback) {
        this.feedback = feedback;
    }

}

MainActivity.java

package com.lc.bombtest;

import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import cn.bmob.push.BmobPush;
import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobInstallation;
import cn.bmob.v3.BmobPushManager;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.SaveListener;

import com.lc.bombtest.bean.Feedback;

public class MainActivity extends Activity {

    private static final String Application_ID = "e8296559cf0e088ad146c34ae7f99b72"; // 应用的ID

    private EditText mName;
    private EditText mFeedback;
    private Button query_by_name_btn;
    private EditText query_by_name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化 Bmob SDK
        // 使用时请将第二个参数Application ID替换成你在Bmob服务器端创建的Application ID
        Bmob.initialize(this, Application_ID);

        // 启动Push SDK的初始化
        BmobInstallation.getCurrentInstallation(this).save();
        BmobPush.startWork(this, Application_ID);

        mName = (EditText) this.findViewById(R.id.name);
        mFeedback = (EditText) this.findViewById(R.id.feedback);
        query_by_name_btn = (Button) this.findViewById(R.id.query_by_name_btn);
        query_by_name = (EditText) this.findViewById(R.id.query_by_name);

    }

    /**
     * submit的点击事件
     *
     * @param view
     */
    public void submit(View view) {
        String nameString = mName.getText().toString();
        String feedbackString = mFeedback.getText().toString();

        if (nameString.equals("") || feedbackString.equals("")) {
            return;
        }

        // JavaBean的使用
        Feedback feedback = new Feedback();
        feedback.setName(nameString);
        feedback.setFeedback(feedbackString);

        // 保存数据到服务器端
        feedback.save(MainActivity.this, new SaveListener() {

            @Override
            public void onSuccess() {
                Toast.makeText(MainActivity.this, "submit success",
                        Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int i, String s) {
                Toast.makeText(MainActivity.this, "submit failure",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 查询所有的数据queryAll
     */
    public void queryAllData(View view) {

        BmobQuery<Feedback> query = new BmobQuery<Feedback>();
        query.findObjects(MainActivity.this, new FindListener<Feedback>() {

            @Override
            public void onSuccess(List<Feedback> feedbacks) {
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        MainActivity.this);
                builder.setTitle("Query All!");

                String string = "";

                for (Feedback feedback : feedbacks) {
                    string += feedback.getName() + ":" + feedback.getFeedback()
                            + "\n";
                }

                builder.setMessage(string);
                builder.create().show();
            }

            @Override
            public void onError(int i, String s) {

            }

        });

    }

    /**
     * 根据姓名查询数据
     *
     * 单条数据的查询
     *
     * @param view
     */
    public void queryName(View view) {
        String str = query_by_name.getText().toString();
        if (str.equals("")) {
            return;
        }
        BmobQuery<Feedback> query = new BmobQuery<Feedback>();

        query.addWhereEqualTo("name", str);// 增加的条件查询

        query.findObjects(MainActivity.this, new FindListener<Feedback>() {

            @Override
            public void onError(int i, String s) {

            }

            @Override
            public void onSuccess(List<Feedback> feedbacks) {
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        MainActivity.this);
                builder.setTitle("Query By Name!");

                String string = "";

                for (Feedback feedback : feedbacks) {
                    string += feedback.getName() + ":" + feedback.getFeedback()
                            + "\n";
                }

                builder.setMessage(string);
                builder.setNegativeButton("取消", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });

                builder.setPositiveButton("确定", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                builder.create().show();
            }
        });

    }

    /**
     * 添加的push事件
     *
     * @param view
     */
    public void pushAll(View view) {
        BmobPushManager pushManager = new BmobPushManager(MainActivity.this);
        pushManager.pushMessageAll("Test");
    }
}

PushReceiver.java

package com.lc.bombtest.broadcast;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import cn.bmob.push.PushConstants;

import com.lc.bombtest.R;

public class PushReceiver extends BroadcastReceiver {

    /**
     * 获取推送消息
     */
    @Override
    public void onReceive(Context context, Intent intent) {

        String msgStringg = "";
        if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {
            String message = intent
                    .getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING);// 获取推送消息
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

            // 解析数据
            JSONTokener jsonTokener = new JSONTokener(message);
            try {
                JSONObject object = (JSONObject) jsonTokener.nextValue();
                msgStringg = object.getString("alert");// 这里的alert是key
            } catch (JSONException e) {
                e.printStackTrace();
            }
            // notifications管理器
            NotificationManager notificationManager = (NotificationManager) context
                    .getSystemService(Context.NOTIFICATION_SERVICE);

            // 创建notification对象
            Notification notification = new Notification(
                    R.drawable.ic_launcher, "TestBmob",
                    System.currentTimeMillis());

            // 设置notification的点击事件
            notification.setLatestEventInfo(context, "Bomb Test", msgStringg,
                    null);
            notificationManager.notify(R.drawable.ic_launcher, notification);
        }
    }
}

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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/feedback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/name"
        android:layout_alignRight="@+id/name"
        android:layout_below="@+id/name"
        android:layout_marginTop="25dp"
        android:ems="10"
        android:hint="feedback" />

    <EditText
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:hint="your name" />

    <Button
        android:id="@+id/submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/feedback"
        android:layout_below="@+id/feedback"
        android:layout_marginTop="21dp"
        android:onClick="submit"
        android:text="提交" />

    <Button
        android:id="@+id/queryAll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/submit"
        android:layout_alignBottom="@+id/submit"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/submit"
        android:onClick="queryAllData"
        android:text="查询所有" />

    <EditText
        android:id="@+id/query_by_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/submit"
        android:layout_centerVertical="true"
        android:ems="10"
        android:hint="your name" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/query_by_name_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/feedback"
        android:layout_centerVertical="true"
        android:onClick="queryName"
        android:text="查询" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/query_by_name"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="65dp"
        android:layout_marginLeft="18dp"
        android:onClick="pushAll"
        android:text="推送消息" />

</RelativeLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.lc.bombtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <!-- 使用Bomb的一些权限 -->
    <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" />

    <!-- BmobPush SDK权限 -->
    <permission
        android:name="cn.bmob.permission.push"
        android:protectionLevel="normal" />

    <uses-permission android:name="cn.bmob.permission.push" /> <!-- 添加自定义的权限 -->
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.lc.bombtest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name="cn.bmob.push.lib.service.PushService"
            android:exported="true"
            android:label="PushService"
            android:permission="cn.bmob.permission.push"
            android:process="cn.bmob.push" >
            <intent-filter>
                <action android:name="cn.bmob.push.lib.service.PushService" />
            </intent-filter>
        </service>

        <receiver android:name="cn.bmob.push.PushReceiver" >
            <intent-filter android:priority="2147483647" > <!-- 优先级加最高 -->
                <!-- 系统启动完成后会调用 -->
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <!-- 解锁完成后会调用 -->
                <action android:name="android.intent.action.USER_PRESENT" />
                <!-- 监听网络连通性 -->
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

        <!-- 自己定义的Receiver -->
        <receiver android:name="com.lc.bombtest.broadcast.PushReceiver" >
            <intent-filter>
                <action android:name="cn.bmob.push.action.MESSAGE" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

效果:

其中Bomb后台数据:

时间: 2024-08-06 20:07:11

Bmob的使用案例的相关文章

Bmob 开发Android程序快速入门--小demo

注册Bmob帐号 在网址栏输入www.bmob.cn或者在百度输入Bmob进行搜索,打开Bmob官网后,点击右上角的“注册”,在跳转页面填入你的姓名.邮箱.设置密码,确认后到你的邮箱激活Bmob账户,你就可以用Bmob轻松开发应用了. 网站后台创建应用 登录账号进入bmob后台后,点击后台界面左上角“创建应用”,在弹出框输入你应用的名称,然后确认,你就拥有了一个等待开发的应用. 获取应用密钥和下载SDK 选择你要开发的应用,点击该应用下方对应的“应用密钥” 在跳转页面,获取Application

Android IM即时通信开发总结

IM即时通信的最大成功实例应该就是微信了吧,,,这次的IM即时通信是建立在Bmob上的,借用了人家的服务端和IM.Android SDK 传送: Andorid快速入门 详细开发文档 IM快速入门 它的文档组织不是很好,我觉得基本上就是这三个链接比较好,所有的链接都来自这个页面 http://docs.bmob.cn/android/developdoc/index.html?menukey=develop_doc&key=develop_android 然后就是要自己看类库文档,不得不说,写得

Bmob失物招领教程即源代码

最近在学习Bmob,感觉功能挺强大的,分享一下!感兴趣的童鞋可以一块学习哈! 效果图: 源代码地址:http://download.csdn.net/detail/gxseveryday/8817749 失物招领的简单案例,实现物品的发布.修改.呈现和删除,展示如何使用Bmob快速开发一个有后端数据库的应用软件.使用场景如下:用户捡到物品,打开手机软件,填写物品的招领信息(标题.描述和联系方式):用户丢失物品,打开手机软件,填写物品的丢失信息(标题.描述和联系方式):任何人都可以查看到失物和招领

Bmob移动后端云服务平台--Android从零开始--(二)android快速入门

Bmob移动后端云服务平台--Android从零开始--(二)android快速入门 上一篇博文我们简单介绍何为Bmob移动后端服务平台,以及其相关功能和优势.本文将利用Bmob快速实现简单例子,进一步了解它的强大之处. 一.准备工作 1.注册Bmob账号 在网址栏输入www.bmob.cn或者在百度输入Bmob进行搜索,打开Bmob官网后,点击右上角的"注册",在跳转页面填入你的姓名.邮箱.设置密码,确认后到你的邮箱激活Bmob账户,你就可以用Bmob轻松开发应用了. 2.网站后台创

解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例

在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处多,在RHEL6中安装XtraBackup时会发生缺少依赖包的现象 本案例针对Xtra缺少依赖包的情况进行安装分析解决 1.本实验环境 [root@master ~]# uname  -r 2.6.32-573.el6.x86_64 [root@master ~]# cat /etc/redhat-

系统内存耗尽的案例分析

近日遇到一个RAC节点hang导致节点被重启的问题,最后经过分析,发现在系统运行一段时间后,系统内存就会耗尽,原本256G的内存,最后只剩几百M. 1. 问题时间段的TOP输出可以看到,内存只剩7G,而分析内存问题,TOP输出是不够的,一般情况下,Database的SGA和PGA是内存使用大户,所以,在TOP很难发现谁是使用内存最多的. 除非某些进程内存使用的格外明显 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Linux OSWbb v7.3.

案例分享:使用员工电脑监控,有什么好处?

下面分享一个真实案例: 北京**科技有限公司梁总想要通过企业员工电脑监控来对员工上网进行管理,通过软件的监控与管理,减少上班与工作无关的上网行为,从而提高员工有效工作效率. 员工工作效率低,上网无节制 梁总发现,最近公司业绩颇有下滑的趋势,于是想要了解员工的详细工作进展,当他在公司时,每一个员工看起来都在忙碌着工作,似乎没什么不妥,但是原因到底是什么呢?难道这只是表面的工作,平时我不在公司,是这样的状态吗?员工会在我离开时,大部分时间在做与工作无关的事,上网聊天?购物? 后来,梁总经朋友介绍,说

OpenFEA应用案例

OpenFEA分析性能卓越,使用简便,自发布以来,即受到大数据分析师的推祟,在各行各业广泛得到应用.    案例一:网络安全态势感知     网络安全态势感知,是基于OpenFEA技术,通过对影响网络安全的资产.漏洞.攻击.异常流量等因素进行大数据分析,使用户宏观.全局的了解网络的安全状况,动态把握特定环境下的网络风险演变过程.从而有效保障网络空间的安全,构筑"防护+监测"的全方位安全保障体系.      案例二:用户异常行为分析     用户异常行为分析(简称UBA),是以OpenF

Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段落,又是新一月,上月主要是围绕MediaPlayer相关展开,从今天开始,开始分析多媒体框架中的Camera模块,看下今天的Agenda: Camera拍照 Camera录像 新API android.hardware.camera2 新旧API特点对比 Camera自定义相机 新API andro