首页 > 技术文章 > 安卓实战——第三方服务之Bmob后端云(二)对数据的增、删、查、改。

corehouse 2017-01-15 19:22 原文

一 前 言


后端云支持对上传的数据可以实现增删查改,即增加、删除、查询、修改。而在这四个操作里面,是通过唯一的 关键值来对应其数据,这个在创建数据时候从后端云唯一穿过的一个类似乱码的值,属于String类型。我们只需要根据这个关键值去操作数据。


二 布局

实现增查改的按钮即可 ~~


<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:scrollbars="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditText
            android:id="@+id/et_name"
            android:gravity="center"
            android:hint="输入名字"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <EditText
            android:id="@+id/et_number"
            android:gravity="center"
            android:hint="输入学号"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <EditText
            android:id="@+id/et_score"
            android:gravity="center"
            android:hint="输入成绩"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:onClick="btn_card"
            android:text="记录"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/btn_equry"
            android:text="查询"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/btn_updata"
            android:text="修改"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/btn_delete"
            android:text="删除"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</ScrollView>

效果图如下:


这里写图片描述


二 代码实现:增加操作



①创建实体类 Student.java,继承 BmobObject,定义个人的参数,对应云端。成功会在云端创建student表。



package com.example.xuhong.bmobsample_master;

import cn.bmob.v3.BmobObject;

/*
 *  项目名:  BmobSample-master 
 *  包名:    com.example.xuhong.bmobsample_master
 *  文件名:   Student
 *  创建者:   XuHong
 *  创建时间:  2017/1/15 18:51
 *  描述:    个人实体类
 */
public class Student extends BmobObject {

    //名字
    private String name;
    //学号
    private String number;
    //分数
    private  int score;

    public String getName() {
        return name;
    }

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

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}


主类实现。

在manifest.xml声明权限

<!--允许联网 -->
<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" />

初始化布局 initView()

初始化SDK,在oncreat方法实现(由于是在自动导入的 ,所以不需要自己导入jar)

写入云端成功监听

如果可以成功写入云端,则会在savelistene监听方法中返回唯一的 ID值,此值是我们操作某条数据的关键


package com.example.xuhong.bmobsample_master;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import cn.bmob.v3.Bmob;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.SaveListener;

public class MainActivity extends AppCompatActivity {

    private EditText et_name,et_number,et_score;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化SDk,第二个参数是在自己创建云端给予的唯一的 ApplicationID
        Bmob.initialize(this, "600fdbfe776869fafc740b4a894e3888");
        //初始化View
        initView();
    }

    private void initView() {
        et_name= (EditText) findViewById(R.id.et_name);
        et_number= (EditText) findViewById(R.id.et_number);
        et_score= (EditText) findViewById(R.id.et_score);
    }

    public  void btn_card(View v){
        //获取内容
        String name =et_name.getText().toString();
        String number =et_number.getText().toString();
        String score =et_score.getText().toString();
        //判断为空?
        if (!name.isEmpty()&&!number.isEmpty()&&!score.isEmpty()){

            Toast.makeText(MainActivity.this,"某项输入不能为空!",Toast.LENGTH_LONG).show();
        }else {
            //绑定数据,并且通过save方法上传到云端
            Student student =new Student();
            student.setName(name);
            student.setNumber(number);
            student.setScore(Integer.parseInt(score));
            //savrlistener监听是否上传成功
            student.save(new SaveListener<String>() {
                @Override
                public void done(String s, BmobException e) {
                    //判断异常指数e是否为空,否则返回唯一ID
                    if(e==null){
                        Toast.makeText(MainActivity.this,"记录成功:ID为"+s,Toast.LENGTH_LONG).show();
                    }else{
                        Toast.makeText(MainActivity.this,"失败!"+e,Toast.LENGTH_LONG).show();
                    }
                }
            });
        }
    }
}

看看效果可以返回ID值了哦!
这里写图片描述


我们再看看云端的数据~成功了哦~


这里写图片描述


三 代码实现:查询操作

我们需要在其对应的ID来操作。


  BmobQuery<Student> student=new BmobQuery<>();
        //参数实在表中的id唯一值,对应云端
        student.getObject("7a41ff5591", new QueryListener<Student>() {
            @Override
            public void done(Student student, BmobException e) {
                if(e==null){
                    Toast.makeText(MainActivity.this,"查询成功:创建时间为:"+student.getCreatedAt()
                            +",更新时间为:"+student.getUpdatedAt()
                            +",名字:"+student.getName()
                            +",分数:"+student.getScore()
                            +",学号:"+student.getNumber()
                            +",所在的表名:"+student.getTableName(),Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(MainActivity.this,"失败!"+e,Toast.LENGTH_LONG).show();
                }
            }
        });

效果图:

这里写图片描述


四 代码实现:更新操作


Student student = new Student();
        //修改之后的分数
        student.setScore(90);
        //参数实在表中的id唯一值,对应云端
        student.update("7a41ff5591", new UpdateListener() {
            @Override
            public void done(BmobException e) {
                if(e==null){
                    Toast.makeText(MainActivity.this,"成功!",Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(MainActivity.this,"失败!"+e,Toast.LENGTH_LONG).show();
                }
            }
        });

点击之后我们看看云端的效果

这里写图片描述


五 代码实现:删除操作


  Student student = new Student();
        //参数实在表中的id唯一值,对应云端
        student.delete("7a41ff5591", new UpdateListener() {
            @Override
            public void done(BmobException e) {
                if(e==null){
                    Toast.makeText(MainActivity.this,"成功!",Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(MainActivity.this,"失败!"+e,Toast.LENGTH_LONG).show();
                }
            }
        });
 }

那行数据不存在了~

这里写图片描述


请支持原创:http://blog.csdn.net/xh870189248

推荐阅读