首页 > 其他分享 >Android之Bmob移动后端云服务器

Android之Bmob移动后端云服务器

时间:2023-09-11 15:31:43浏览次数:42  
标签:void register Bmob new public import 服务器 Android android

Android之Bmob移动后端云服务器_android

PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的。这里介绍一个移动后端云服务器平台bmob,这不仅可以实现云数据库储存,还可以获取手机验证等,随时随地都很轻松,下面写一个小demo,实现一个登陆注册功能,认识增删查改。下面我稍微写一个例子,简单实现注册登录功能。

1:首先到bmob官网,注册一个账号,里面创建一个项目,如图:

Android之Bmob移动后端云服务器_ide_02

Android之Bmob移动后端云服务器_xml_03

2:创建一个android项目,(AndroidStudio)

(1):添加依赖:在app下的build.gradle中添加

compile 'cn.bmob.android:bmob-sdk:3.4.6'
compile 'com.squareup.okhttp:okhttp:2.4.0'//CDN文件服务使用okhttp相关包进行文件的上传和下载(必填)
compile 'com.squareup.okio:okio:1.4.0'

 

sourceSets {
main.jniLibs.srcDirs = ['libs']
}

useLibrary 'org.apache.http.legacy'

位置如图:

Android之Bmob移动后端云服务器_android_04

(2)添加权限:

<!--允许联网-->

 

<uses-permission android:name="android.permission.INTERNET"/>
<!--获取GSM(2g)、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"/>
<!--允许读取手机状态 用于创建BmobInstallation-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
(3):添加maven,到指定的云库
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master"}

Android之Bmob移动后端云服务器_ide_05

(4:)初始化:

Android之Bmob移动后端云服务器_xml_06

Bmob.initialize(this,"你的 应用ID");

3:下面就是代码了

写一个实体类person,

package cn.day1.model;

import cn.bmob.v3.BmobObject;

/**
 * Created by CMusketeer on 17/10/22.
 */
public class Person extends BmobObject {
    private String name;
    private String password;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

写三个布局,分别是注册页面,登录页面,登录成功跳转的页面

activity_main.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"
    tools:context="cn.day1.bmobtest1.MainActivity">

    <TextView
        android:gravity="center"
        android:textSize="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="登录" />
    <EditText
        android:id="@+id/id_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="username"/>

    <EditText
        android:id="@+id/id_userpassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/id_ok"
            android:layout_width="0dp"
            android:text="登录"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

        <Button
            android:id="@+id/id_register"
            android:text="注册"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>
</LinearLayout>

注册页面:register_layout.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"
    tools:context="cn.day1.bmobtest1.MainActivity">

    <TextView
        android:gravity="center"
        android:textSize="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="注册中心" />
    <EditText
        android:id="@+id/id_register_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="username"/>

    <EditText
        android:id="@+id/id_register_userpassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <Button
            android:id="@+id/id_register_ok"
            android:text="注册"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>
</LinearLayout>
登录成功页面:success.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="成功登录"
        android:gravity="center"
        android:textSize="50dp"/>

</LinearLayout>

注册Activity,RegisterActivity.java 功能:增

这里是一个简单的注册,里面没有加判断,所以,一个号可以重复注册,但是只有唯一ID。

package cn.day1.bmobtest1;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import cn.bmob.v3.listener.SaveListener;
import cn.day1.model.Person;

/**
 * Created by CMusketeer on 17/10/22.
 */
public class RegisterActivity extends Activity {

    private TextView register_user;
    private TextView register_password;
    private Button register_ok;
    private Person p2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_layout);
        addControl();//加载控件

        addRegisterShow();//注册方法



    }

    private void addRegisterShow() {
        register_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String rUser=register_user.getText().toString().trim();
                String rPassword=register_password.getText().toString().trim();

                //判断用户名和密码是否为空,如果为空则不能进去。
                if(rUser.length()>0&&rPassword.length()>0){
                    p2 = new Person();
                    p2.setName(rUser);
                    p2.setPassword(rPassword);
                    //插入方法
                    p2.save(RegisterActivity.this, new SaveListener() {
                        @Override
                        public void onSuccess() {
                            // TODO Auto-generated method stub
                            register_password.setText("");
                            register_user.setText("");
                            Toast.makeText(RegisterActivity.this, "添加数据成功,返回objectId为:" + p2.getObjectId(), Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onFailure(int code, String msg) {
                            // TODO Auto-generated method stub
                            Toast.makeText(RegisterActivity.this, "创建数据失败:" + msg, Toast.LENGTH_SHORT).show();
                        }
                    });
                }else{
                    Toast.makeText(RegisterActivity.this, "用户名或者密码不能为空", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void addControl() {
        register_user = (TextView) findViewById(R.id.id_register_username);
        register_password = (TextView) findViewById(R.id.id_register_userpassword);
        register_ok = (Button) findViewById(R.id.id_register_ok);


    }
}

登录页面:MainActivity.java 功能:查

package cn.day1.bmobtest1;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
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.day1.model.Person;

public class MainActivity extends AppCompatActivity {

    private Person p2;
    private TextView lgUser;
    private TextView lgPassword;
    private Button btn_ok;
    private Button btn_rg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bmob.initialize(this, "你的 应用id");
        setContentView(R.layout.activity_main);

        addControl();
        addLogin();




    }

    private void addLogin() {
        btn_rg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,RegisterActivity.class);
                startActivity(intent);
            }
        });

        btn_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BmobQuery<Person> query=new BmobQuery<Person>();
                query.findObjects(MainActivity.this,new FindListener<Person>(){

                    String lgU=lgUser.getText().toString().trim();
                    String lgp=lgPassword.getText().toString().trim();
                    int panduan=1;

                    @Override
                    public void onSuccess(List<Person> list) {
                        for(int i=0;i<list.size();i++){
                                String name=list.get(i).getName();

                                String password=list.get(i).getPassword();
                            Log.e("user","唯一 id:"+list.get(i).getObjectId()+"----"+name+"---"+password);
                                if(name.equals(lgU) && password.equals(lgp)){
                                    Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                                    panduan=2;
                                    //成功后panduan等于2,则跳出该循环,并且把输入快都清空,跳转到指定页面
                                    lgUser.setText("");
                                    lgPassword.setText("");
                                    Intent intent=new Intent(MainActivity.this,Success.class);
                                    startActivity(intent);

                                    break;
                                }

                        }
                        if(panduan==1){
                            Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
                        }
                    }

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

                    }
                });
            }
        });


    }

    private void addControl() {

        lgUser = (TextView) findViewById(R.id.id_username);
        lgPassword = (TextView) findViewById(R.id.id_userpassword);
        btn_ok = (Button) findViewById(R.id.id_ok);
        btn_rg = (Button) findViewById(R.id.id_register);
    }
}

登录成功页面 Success.java

package cn.day1.bmobtest1;

import android.app.Activity;
import android.os.Bundle;

/**
 * Created by CMusketeer on 17/10/22.
 */
public class Success extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.success);
    }
}

总结:

唯一id的获取可以通过用户名来获取,当用户输入用户名时,只要数据库中用户名和输入的一致,则就可以list.get(i).getObjectId()

处理增删查改
增:
person = new Person();
person.setName(user);
person.setAddress(password);
person.save(new SaveListener<String>() {
    @Override
    public void done(String s, BmobException e) {
        if(e == null){
            Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();

           
        }
        else{

        }
    }
});
删
Id可以通过查处所有的,从而得到id
id=list.get(i).getObjectId();
 person = new Person();
person.delete(id, new UpdateListener() {
 @Override
 public void done(BmobException e) {
      if(e==null){
 Log.e("sss","删除成功"); }
  }
  });


查 :和上面的查不大一样,这也是一种方法
//查询所有,
query.findObjects(new FindListener<Person>() {
    @Override
    public void done(List<Person> list, BmobException e) {
}}
//查询单个
query.getObject(id,new listener)
改
person.setName(“111”);
person.update(id,new UpdateListener() {
                                @Override
                                public void done(BmobException e) {
                                    if(e==null){
//                                        Toast.makeText(MainActivity.this, "更改成功", Toast.LENGTH_SHORT).show();
                                        Log.e("sss","更改成功");
                                    }
                                }

效果图:

Android之Bmob移动后端云服务器_android_07

Android之Bmob移动后端云服务器_xml_08

Android之Bmob移动后端云服务器_android_09


标签:void,register,Bmob,new,public,import,服务器,Android,android
From: https://blog.51cto.com/u_16163452/7436200

相关文章

  • 如何选择最佳视频网站服务器?
        但是在为视频网站选择服务器之前,您需要先了解您应该注意什么。租用视频网站服务器与通常将视频上传到第三方的视频网站有很大不同,因此如果需要自建视频网站的话,对于服务器的选择非常重要,下面就来谈谈在选择视频服务器的时候应该如何选择服务器配置视频网站使用场景......
  • 如何选择最佳视频网站服务器?
        但是在为视频网站选择服务器之前,您需要先了解您应该注意什么。租用视频网站服务器与通常将视频上传到第三方的视频网站有很大不同,因此如果需要自建视频网站的话,对于服务器的选择非常重要,下面就来谈谈在选择视频服务器的时候应该如何选择服务器配置视频网站使用场景......
  • 想跳出Android内卷困境,简历匹配上大厂你需要做到那些
    内卷化是一个近年来在中文网络上经常出现的词汇,通常用来描述某个领域中过度的竞争和内部消耗。这个概念直观地说就是“向内演化”,更广泛地说,所有没有实质意义的消耗都可以称为内卷。在生活中,许多看似精益求精的重复工作,实际上是在内部范围内施展,而不是向外扩张,这也可以被视为内卷的......
  • 将StoreFront服务器重置为出厂默认设置
    在某些情况下,需要将StoreFront安装重置为其初始安装状态。例如,在将StoreFront服务器重新添加到服务器组之前,这是必要的。可以执行手动卸载并重新安装,但这会比较耗时,并且可能会导致其他不可预见的问题。相反,您可以运行Clear-STFDeployment PowerShellcmdlet将StoreFront服......
  • android 混淆proguard_rule
    #设置混淆的压缩比率0~7-optimizationpasses5#混淆时不使用大小写混合,混淆后的类名为小写-dontusemixedcaseclassnames#混淆时不记录日志-verbose#代码优化-dontshrink#保留注解不混淆-keepattributes*Annotation*,InnerClasses#避免混淆泛型-keepattributesSignatu......
  • 搭建NTP时间服务器
    NTP:NetworkTimeProtocol,网络时间协议。利用ntp协议可以实现网络中的计算机时间同步。1、ntpdate存在时间服务器,可以使用ntpdate来立即同步本地时间。特点:执行一次命令就立即同步一次时间。不用修改配置文件,可以直接用例如:ntpdatentp.aliyun.com2、ntpntp是客户端......
  • Android9.0 SystemServerCrash问题总结
    设备在反复休眠唤醒后SystemServer挂掉背景:同事自测发现,当反复按压Power键后概率性出现系统挂掉的问题。分析过程查看系统log如下:12-0511:43:27.53015091759IWatchdog:CollectingBinderTransactionStatusInformation12-0511:43:29.70415091759EWatchdog:First......
  • Android View绘制原理-GrTexture
    GrSurface有两个主要的子类,一个GrRenderTarget,上一篇文章已经分析过,它包装的是一个GrBackendRenderTarget,另外一个兄弟就是GrTexture,它代表的是GPU上的一个纹理,同时GrTexture也有配套的代理类GrTextureProxy。GrTextureProxy继承自GrSurfaceProxy。本文继续来研究GrTexture的生成......
  • 调用视频直播点播平台EasyDSS流媒体服务器上传点播文件接口的具体操作步骤
    EasyDSS互联网视频云平台可提供一站式的视频转码、点播、直播、推拉流、时移回放等服务,也能支持4K视频的直播、点播等功能。EasyDSS可用于视频点播,并支持OBS、推流相机、EasyRTMP等设备的推流直播,可应用在AR、VR、无人机推流、虚拟直播、教育培训、远程会议等场景中。 有用户向......
  • 关于Android开发中推送消息通知推送消息到前台的问题
    为什么推送点击发送按钮之后没有消息进行发送?(以简单音乐播放器为例)1.前景创建了一个Activity:ForegroundServiceActivity.java//代码如下:packagecom.app.custom.demo01;importandroidx.appcompat.app.AppCompatActivity;importandroid.content.Intent;importandr......