十二、 Bmob免费移动后方服务,你不用再搭php+MySQL移动后端 Android studio+Bmob后台服务feedback简单实现



BaasBackend as a Service它的主要特征是将云的某些能力封装起来,做成适合移动或web应用的功能,做成打包销售提供给用户;也就是将移动或web所需要的功能放在云上面以云软件的形式提供给使用者。

云后端服务(云存储)的优势:容易扩充、让移动开发者可以不去理会服务器性能优化和服务器代码编写

服务包括:账户的管理、消息推送、社交网络整合、异地信息服务、广告推广、应用推广

移动后端服务Baas提供商:

国外的有Stackmobkinveyamazon

国内的有:bmobavos cloudatom

Bmob 的理念:Bmob解决了后端逻辑重复开发和维护的问题,无需后端编程和租用服务器 让移动开发更简单

使用Bmob无需再造应用后端,便能轻松拥有应用开发的各种后端能力支持,减少了开发者将应用从idea到产品(成品)的时间,我们提供了大量标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速。

Bmob官网地址:http://www.bmob.cn

 


Bmob账户:younghare

通过快速入门,你将学会如何使用bmob;如果你想提高使用bmob的功能可以跟技术大牛一起学习:视频教程;更详细的解释请查看Android开发文档

第一步:Bmob创建“czg学习演示”应用

先上个图

鉴于目前Google官方推荐使用 Android Studio 进行Android项目开发,自 V3.4.2 开始,Bmob Android SDK 可以使用Gradle来进行包依赖管理,如果你使用Android Studio来进行基于BmobSDK的项目开发,建议你按照如下两个步骤进行:

一、 Projectbuild.gradle文件中添加Bmobmaven仓库地址,示例如下:(注意文字说明部分):

代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

  

  buildscript {

    repositories {

        jcenter()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:2.0.0'

  

        // NOTE: Do not place your application dependencies here; they belong

        // in the individual module build.gradle files

    }

}

  

allprojects {

    repositories {

        jcenter()

        //Bmobmaven仓库地址,必须填写

        maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }

    }

}

  

task clean(type: Delete) {

    delete rootProject.buildDir

}

  

 

二、 appbuild.gradle文件中添加compile依赖文件,示例如下:(注意文字说明部分):
apply plugin: 'com.android.application'

  

  android {

    compileSdkVersion 23

    buildToolsVersion "23.0.3"

  

    //**bmob-sdk:3.4.6版本依赖包,用于兼容Android6.0系统**

    useLibrary 'org.apache.http.legacy'

  

    defaultConfig {

        applicationId "czg.czgbmob"

        minSdkVersion 15

        targetSdkVersion 23

        versionCode 1

        versionName "1.0"

    }

    buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

}

  

dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])

    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:23.3.0'

  

  

    //以下SDK开发者请根据需要自行选择

    //bmob-sdkBmobandroid sdk包,包含了Bmob的数据存储、文件等服务,以下是最新的bmob-sdk:

    compile 'cn.bmob.android:bmob-sdk:3.4.6'

    compile 'com.squareup.okhttp:okhttp:2.4.0'//`V3.4.3版本`开始,使用`okhttp`优化SDK的网络框架

    compile 'com.squareup.okio:okio:1.4.0'

    compile 'com.android.support:support-v4:23.2.1'

    //:bmob-sdk:3.4.6需要依赖okhttp2.4.0)、okio2.4.0),如果需要兼容Android6.0系统,则还需要添加support-v423.2.1)及org.apache.http.legacy包,具体可查看下面注释[1]的解释

  

  

  

  

  }
 
AndroidManifest.xml中增加权限代码
<!-- BmobSDK权限 -->

<!-- 允许联网 -->

  <uses-permission android:name="android.permission.INTERNET" />

  <!-- 获取GSM2g)、WCDMA(联通3g)等网络状态的信息 -->

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  <!-- 获取wifi网络状态的信息 -->

  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  <!-- 保持CPU 运转,屏幕和键盘灯有可能是关闭的,用于文件上传和下载 -->

  <uses-permission android:name="android.permission.WAKE_LOCK" />

  <!-- 获取sd卡写的权限,用于文件上传和下载 -->

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  <!-- 推送权限 -->

<!-- 允许读取手机状态 -->

  <uses-permission android:name="android.permission.READ_PHONE_STATE" />

  <!-- 允许接收屏幕解锁广播 -->

  <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />

  <!-- 允许接收开机广播 -->

  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

  <!-- 其他权限 -->

  <uses-permission android:name="android.permission.VIBRATE" />
 
创建一个activity名为BmobFeedbackActivity.java
package czg.czgbmob;

  

  import android.support.v7.app.AppCompatActivity;

  import android.os.Bundle;

  import android.view.View;

  import android.widget.EditText;

  import android.widget.TextView;

  import android.widget.Toast;

  

  import java.util.List;

  

  import cn.bmob.v3.Bmob;

  import cn.bmob.v3.BmobQuery;

  import cn.bmob.v3.listener.FindListener;

  import cn.bmob.v3.listener.SaveListener;

  

  public class BmobFeedbackActivity extends AppCompatActivity {

    private EditText et_username,et_feedback,et_usernameQry;

    private TextView tv_feedbackAll,tv_feedbackQry;

  

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_bmob_feedback);

  

        Bmob.initialize(this,"e7e000e141cac6a4c46e95117af566cc");  //appkey就是Bmob应用后台设置中的Application ID

  

        et_username= (EditText) findViewById(R.id.et_username);

        et_feedback= (EditText) findViewById(R.id.et_feedback);

        tv_feedbackAll= (TextView) findViewById(R.id.tv_feedbackAll);

        et_usernameQry= (EditText) findViewById(R.id.et_usernameQry);

        tv_feedbackQry= (TextView) findViewById(R.id.tv_feedbackQry);

    }

    public void submitOnclick(View view){

        String sUsername=et_username.getText().toString();

        String sFeedback=et_feedback.getText().toString();

        if (sUsername.equals("") || (sFeedback.equals(""))){

            Toast.makeText(BmobFeedbackActivity.this,"用户名不能为空,反馈信息不能为空",Toast.LENGTH_LONG).show();

        }else {

            JavaBean_feeback javaBean_feeback =new JavaBean_feeback();

            javaBean_feeback.setUsername(sUsername);

            javaBean_feeback.setFeedback(sFeedback);

            //调用Bmobsdk保存数据提交给“云服务器”通过回调方法处理成功与失败的情况

            javaBean_feeback.save(BmobFeedbackActivity.this, new SaveListener() {

                @Override

                public void onSuccess() {

                    Toast.makeText(BmobFeedbackActivity.this,"反馈信息成功!",Toast.LENGTH_LONG).show();

  

                }

  

                @Override

                public void onFailure(int i, String s) {

                    Toast.makeText(BmobFeedbackActivity.this,"反馈信息失败",Toast.LENGTH_LONG).show();

  

                }

            });

        }

  

    }

    public void queryAllOnclick(View view){

        BmobQuery<JavaBean_feeback> javaBean_feebackBmobQuerys=new BmobQuery<JavaBean_feeback>();

        javaBean_feebackBmobQuerys.findObjects(BmobFeedbackActivity.this, new FindListener<JavaBean_feeback>() {

            @Override

            public void onSuccess(List<JavaBean_feeback> list) {

                //遍历查询结果

                tv_feedbackAll.setText("========查询结果======");

                for (JavaBean_feeback javaBean_feeback:list){

                    tv_feedbackAll.append("\n" +"用户名:"+ javaBean_feeback.getUsername()+"反馈信息:"+javaBean_feeback.getFeedback());

  

                }

  

            }

  

            @Override

            public void onError(int i, String s) {

                Toast.makeText(BmobFeedbackActivity.this,"查询失败",Toast.LENGTH_LONG).show();

  

            }

        });

  

  

    }

    public void queryOnclick(View view){

        String sUsernameQry=et_usernameQry.getText().toString();

        if (sUsernameQry.equals("")){

            Toast.makeText(BmobFeedbackActivity.this,"请输入用户名",Toast.LENGTH_LONG).show();

            return;

        }

  

        BmobQuery<JavaBean_feeback> javaBean_feebackBmobQuerys=new BmobQuery<JavaBean_feeback>();

        //设置查询条件,可以设置多个条件查询,类似sql语句的where条件

        javaBean_feebackBmobQuerys.addWhereEqualTo("username",sUsernameQry);

        javaBean_feebackBmobQuerys.findObjects(BmobFeedbackActivity.this, new FindListener<JavaBean_feeback>() {

            @Override

            public void onSuccess(List<JavaBean_feeback> list) {

                //遍历查询结果

                tv_feedbackQry.setText("========按用户名查询结果======");

                for (JavaBean_feeback javaBean_feeback:list){

                    tv_feedbackQry.append("\n" +"用户名:"+ javaBean_feeback.getUsername()+"反馈信息:"+javaBean_feeback.getFeedback());

  

                }

  

            }

  

            @Override

            public void onError(int i, String s) {

                Toast.makeText(BmobFeedbackActivity.this,"查询失败",Toast.LENGTH_LONG).show();

  

            }

        });

    }

}
 
Activity的布局代码activity_bmob_feedback.xml
<?xml version="1.0" encoding="utf-8"?>

  <LinearLayout 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:orientation="vertical"

    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=".BmobFeedbackActivity">

  

    <EditText

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:id="@+id/et_username"

        android:hint="请输入用户名" />

  

    <EditText

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:id="@+id/et_feedback"

        android:hint="输入反馈的问题"

        android:lines="2" />

  

    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="提交"

        android:id="@+id/btn_submit"

        android:layout_gravity="center_horizontal"

        android:onClick="submitOnclick" />

  

    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="查询所有的反馈信息"

        android:id="@+id/btn_QueryAll"

        android:onClick="queryAllOnclick"

        android:layout_gravity="center_horizontal" />

  

    <ScrollView

        android:layout_width="match_parent"

        android:layout_height="114dp"

        android:id="@+id/scrollView" >

  

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="------显示所有查询到的记录-----"

            android:id="@+id/tv_feedbackAll" />

    </ScrollView>

  

    <LinearLayout

        android:orientation="horizontal"

        android:layout_width="match_parent"

        android:layout_height="wrap_content">

  

        <EditText

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/et_usernameQry"

            android:layout_weight="1"

            android:hint="要查询的用户名" />

  

        <Button

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="查询"

            android:id="@+id/btn_query"

            android:onClick="queryOnclick"

            android:layout_weight="1" />

  

    </LinearLayout>

  

    <ScrollView

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:id="@+id/scrollView2"

        android:layout_gravity="center_horizontal" >

  

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="------显示按用户名查询的反馈记录-----"

            android:id="@+id/tv_feedbackQry" />

    </ScrollView>

  

</LinearLayout>
 
创建一个javaBeanjavaBean_feeback.java
package czg.czgbmob;

  

  import cn.bmob.v3.BmobObject;

  

  /**

 * Created by Administrator on 2016/5/12.

 * 在使用Bmobsdk去存储一行数据的时候,我们需要javaBean继承至BmobObject这个类

 * javaBean_feeback实际上是对应数据库上的一张表,属性名就对于表中的字段名,一个javaBean_feeback对象就是对于表中的一条记录

 * 当用户提交到云数据库,程序调用的时javaBean_feeback.save方法。它会自动判断后台有没有创建国与javaBean_feeback同名的表,

 *          如果没有则会创建对于的javaBean_feeback表。表的结构有objectidjavaBean_feeback各个属性字段,createAt date,UpdateAt date,ACL Acl字段

 */

  public class JavaBean_feeback extends BmobObject {

    private String username;

    private String feedback;

  

    public String getFeedback() {

        return feedback;

    }

  

    public void setFeedback(String feedback) {

        this.feedback = feedback;

    }

  

    public String getUsername() {

        return username;

    }

  

    public void setUsername(String username) {

        this.username = username;

    }

}
 
源码下载:https://yunpan.cn/cP7X8WsBCMm9t  访问密码 466e
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值