您的位置:首页 > 移动开发 > Android开发

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

2016-05-13 21:07 771 查看




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

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

服务包括:账户的管理、消息推送、社交网络整合、异地信息服务、广告推广、应用推广
移动后端服务Baas提供商:

国外的有Stackmob、kinvey、amazon等

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

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

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

Bmob账户:younghare

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


先上个图


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

一、
在Project的build.gradle文件中添加Bmob的maven仓库地址,示例如下:(注意文字说明部分):

代码如下:
//Top-levelbuildfilewhereyoucanaddconfigurationoptionscommontoallsub-projects/modules.

buildscript{

repositories{

jcenter()

}

dependencies{

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

//NOTE:Donotplaceyourapplicationdependencieshere;theybelong

//intheindividualmodulebuild.gradlefiles

}

}

allprojects{

repositories{

jcenter()

//Bmob的maven仓库地址,必须填写

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

}

}

taskclean(type:Delete){

deleterootProject.buildDir

}


二、在app的build.gradle文件中添加compile依赖文件,示例如下:(注意文字说明部分):

applyplugin:'com.android.application'

android{

compileSdkVersion23

buildToolsVersion"23.0.3"

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

useLibrary'org.apache.http.legacy'

defaultConfig{

applicationId"czg.czgbmob"

minSdkVersion15

targetSdkVersion23

versionCode1

versionName"1.0"

}

buildTypes{

release{

minifyEnabledfalse

proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

}

}

dependencies{

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

testCompile'junit:junit:4.12'

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

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

//bmob-sdk:Bmob的androidsdk包,包含了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需要依赖okhttp(2.4.0)、okio(2.4.0),如果需要兼容Android6.0系统,则还需要添加support-v4(23.2.1)及org.apache.http.legacy包,具体可查看下面注释[1]的解释

}


在AndroidManifest.xml中增加权限代码

<!--BmobSDK权限-->

<!--允许联网-->

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

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

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

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

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

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

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

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

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

<!--推送权限-->

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

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

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

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

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

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

<!--其他权限-->

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


创建一个activity名为BmobFeedbackActivity.java

packageczg.czgbmob;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.EditText;

importandroid.widget.TextView;

importandroid.widget.Toast;

importjava.util.List;

importcn.bmob.v3.Bmob;

importcn.bmob.v3.BmobQuery;

importcn.bmob.v3.listener.FindListener;

importcn.bmob.v3.listener.SaveListener;

publicclassBmobFeedbackActivityextendsAppCompatActivity{

privateEditTextet_username,et_feedback,et_usernameQry;

privateTextViewtv_feedbackAll,tv_feedbackQry;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_bmob_feedback);

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

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);

}

publicvoidsubmitOnclick(Viewview){

StringsUsername=et_username.getText().toString();

StringsFeedback=et_feedback.getText().toString();

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

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

}else{

JavaBean_feebackjavaBean_feeback=newJavaBean_feeback();

javaBean_feeback.setUsername(sUsername);

javaBean_feeback.setFeedback(sFeedback);

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

javaBean_feeback.save(BmobFeedbackActivity.this,newSaveListener(){

@Override

publicvoidonSuccess(){

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

}

@Override

publicvoidonFailure(inti,Strings){

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

}

});

}

}

publicvoidqueryAllOnclick(Viewview){

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

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

@Override

publicvoidonSuccess(List<JavaBean_feeback>list){

//遍历查询结果

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

for(JavaBean_feebackjavaBean_feeback:list){

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

}

}

@Override

publicvoidonError(inti,Strings){

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

}

});

}

publicvoidqueryOnclick(Viewview){

StringsUsernameQry=et_usernameQry.getText().toString();

if(sUsernameQry.equals("")){

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

return;

}

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

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

javaBean_feebackBmobQuerys.addWhereEqualTo("username",sUsernameQry);

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

@Override

publicvoidonSuccess(List<JavaBean_feeback>list){

//遍历查询结果

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

for(JavaBean_feebackjavaBean_feeback:list){

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

}

}

@Override

publicvoidonError(inti,Strings){

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

}

});

}

}


Activity的布局代码activity_bmob_feedback.xml

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns: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>


创建一个javaBean类javaBean_feeback.java

packageczg.czgbmob;

importcn.bmob.v3.BmobObject;

/**

*CreatedbyAdministratoron2016/5/12.

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

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

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

*如果没有则会创建对于的javaBean_feeback表。表的结构有objectid,javaBean_feeback各个属性字段,createAtdate,UpdateAtdate,ACLAcl字段

*/

publicclassJavaBean_feebackextendsBmobObject{

privateStringusername;

privateStringfeedback;

publicStringgetFeedback(){

returnfeedback;

}

publicvoidsetFeedback(Stringfeedback){

this.feedback=feedback;

}

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

}


源码下载:https://yunpan.cn/cP7X8WsBCMm9t访问密码466e


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: