利用bomb为后台实现打车APP的小Demo

利用bomb为后台实现打车APP的小Demo

想法来源于课上,由于对不太会地图技术,仅仅实现打车APP的一些数据交互功能,包括用户注册,登陆,订单的发布(订单信息存储于后台),邮件提醒。

一、登陆注册功能的实现

设想是登陆界面包括两个文本框分别用来输入用户名密码,两个按钮登陆与注册,注册界面为三个输入框包括用户名密码以及邮箱,一个按钮注册。
直接上代码
1.登陆界面

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/id_username"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="72dp"
        android:hint="用户名"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/id_password"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="140dp"
        android:hint="密码"
        android:inputType="textPassword"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/id_login"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="212dp"
        android:text="登录"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/id_zhuce"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="272dp"
        android:text="注册"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="117dp"
        android:layout_height="34dp"
        android:layout_marginStart="140dp"
        android:layout_marginTop="28dp"
        android:layout_marginEnd="154dp"
        android:text="滴滴打车"
        android:textSize="25dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

2.注册界面,我们需要在res/layout下新建xml文档,我这里新建regist_layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <EditText
        android:id="@+id/id_username"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:hint="用户名"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/id_password"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="88dp"
        android:hint="密码"
        android:inputType="textPassword"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/id_email"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="152dp"
        android:hint="邮箱"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/id_zhuce"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="212dp"
        android:text="注册"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

3.新建User类
bomb在新建应用是会为我们自动创建user表,也会定义一些属性,我们直接用就好了

import cn.bmob.v3.BmobUser;

public class User extends BmobUser {
                                         }

4.新建activity实现注册功能,我这里新建RegistActivity
在这里插入图片描述
这里初始化界面是regist_layout,初始化sdk

public class RegistActivity  extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //初始化 SDK信息
        Bmob.initialize(getApplicationContext(), "你的APPID");

        setContentView(R.layout.regist_layout);
        }
        }

注册功能实现思路:
1.根据ID拿到输入框的内容(类似于jsp根据name属性获取值)
2.调用实例化user对象,并用set方法来用获取文本框的值其赋值
3.调用bomb中的signUp()方法实现注册
4.按钮添加监听,注册成功实现跳转界面,跳转方法为Intent()

具体完整代码:

package com.example.didi;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

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

public class RegistActivity  extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //初始化 SDK信息
        Bmob.initialize(getApplicationContext(), "APPID");

        setContentView(R.layout.regist_layout);

        final EditText e_username = (EditText)findViewById(R.id.id_username);
        final EditText e_password = (EditText)findViewById(R.id.id_password);
        final EditText e_email = (EditText)findViewById(R.id.id_email);
        Button b_zhuce = (Button)findViewById(R.id.id_zhuce);

        //设置监听
        b_zhuce.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String username = e_username.getText().toString();  //获取文本信息
                String password = e_password.getText().toString();
                String email = e_email.getText().toString();
                User user = new User();                             //实例化用户对象
                user.setUsername(username);
                user.setPassword(password);
                user.setEmail(email);

                user.signUp(new SaveListener<BmobUser>(){
                    @Override
                    public void done(BmobUser bmobUser, BmobException e) {
                        if (e == null) {
                            User user = BmobUser.getCurrentUser(User.class);
                            Toast.makeText(getApplication(), "注册成功" ,Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(RegistActivity .this,MainActivity.class);
                            startActivity(intent);
                        } else {
                            Toast.makeText(getApplication(), "失败" +e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }

                });
            }
        });

    }
}

5.登陆功能的实现
登陆实现与注册类似,只不过这里使用bomb的login()方法(官方文档中的方法老百年未更新了无法使用,吐了)

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.content.Intent;

import androidx.appcompat.app.AppCompatActivity;

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



public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //初始化 SDK信息
        Bmob.initialize(getApplicationContext(), "APPID");

        setContentView(R.layout.activity_main);

        final EditText e_username = (EditText)findViewById(R.id.id_username);
        final EditText e_password = (EditText)findViewById(R.id.id_password);
        Button b_login = (Button)findViewById(R.id.id_login);
        Button b_zhuce = (Button)findViewById(R.id.id_zhuce);

        //设置监听
        b_zhuce.setOnClickListener(new View.OnClickListener(){

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

            public void onClick(View v) {
                String username = e_username.getText().toString();  //获取文本信息
                String password = e_password.getText().toString();

                User user = new User();                             //实例化用户对象
                user.setUsername(username);
                user.setPassword(password);

                user.login(new SaveListener<User>() {
                    @Override
                    public void done(User bmobUser, BmobException e) {
                        if (e == null) {
                            User user = BmobUser.getCurrentUser(User.class);
                            Toast.makeText(getApplication(), "登陆成功" ,Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(MainActivity.this,OderActivity.class);
                            startActivity(intent);
                        } else {
                            Toast.makeText(getApplication(), "失败" +e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        });
    }
}

二、订单发布功能的实现

我在前面在登陆成功的代码中,写了跳转到订单发布的界面
1.新建界面order_layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <EditText
        android:id="@+id/chufa"
        android:layout_width="188dp"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:singleLine="true"
        android:hint="出发地"
        android:textSize="20dp"
        android:layout_weight="0.01"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
     />

    <EditText
        android:id="@+id/mudi"
        android:layout_width="188dp"
        android:layout_height="50dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="72dp"
        android:layout_weight="0.01"
        android:hint="目的地"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/email"
        android:layout_width="188dp"
        android:layout_height="50dp"
        android:layout_marginTop="140dp"
        android:layout_weight="0.01"
        android:hint="联系方式"
        android:singleLine="true"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/id_login"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="208dp"
        android:text="发布订单"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

2.新建数据类Oder

import cn.bmob.v3.BmobObject;

public class Order extends BmobObject{
    private String chufa;
    private String mudi;
    public String getChufa() {
        return chufa;
    }
    public void setChufa(String chufa) {
        this.chufa = chufa;
    }
    public String getMudi() {
        return mudi;
    }
    public void setMudi(String mudi) {
        this.mudi = mudi;
    }
}

3.新建OrderActivity实现订单发布(仅实现向后台插入订单数据)

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

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


public class OderActivity extends AppCompatActivity {

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


        //初始化 SDK信息
        Bmob.initialize(getApplicationContext(), "APPID");

        final EditText e_chufa = (EditText)findViewById(R.id.chufa);
        final EditText e_mudi = (EditText)findViewById(R.id.mudi);
        Button b_fabu = (Button)findViewById(R.id.id_login);

        //设置监听
        b_fabu.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String chufa = e_chufa.getText().toString();  //获取文本信息
                String mudi = e_mudi.getText().toString();
                Order  order = new Order();                             //实例化用户对象
                order.setChufa(chufa);
                order.setMudi(mudi);
                //用save方法实现发布订单(向后台插入数据)
                order.save(new SaveListener<String>() {
                    @Override
                    public void done(String s, BmobException e) {
                        if (e == null) {
                            Toast.makeText(getApplication(), "发布成功" ,Toast.LENGTH_SHORT).show();

                        } else {
                            Toast.makeText(getApplication(), "失败" +e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }
        });
    }
}

4.邮件提醒功能
本来是想实现短信提醒,可是短信最少购买1000条,家境贫寒就换成了邮箱提醒来模拟订单发布时,短信提醒有人接了你的订单。
(我用工单询问bomb的工作人员,邮箱是user表中的用户信息属性,邮箱本来是为给用户提供验证的,所以该方法只能发邮件到用户注册的邮箱中,因此我在注册中加入了邮箱的属性)
功能实现还是一样:
获取文本输入的邮件地址,调用方法向邮箱发送邮件。
下面是OrderActivity的完整代码

package com.example.didi;

        import android.os.Bundle;
        import android.util.Log;
        import android.view.View;
        import android.widget.Button;
        import android.widget.EditText;
        import android.widget.Toast;

        import androidx.appcompat.app.AppCompatActivity;

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


/**
 * Created by yf on 2020/3/24.
 */

public class OderActivity extends AppCompatActivity {

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


        //初始化 SDK信息
        Bmob.initialize(getApplicationContext(), "APPID");

        final EditText e_chufa = (EditText)findViewById(R.id.chufa);
        final EditText e_mudi = (EditText)findViewById(R.id.mudi);
        final EditText e_email = (EditText)findViewById(R.id.email);
        Button b_fabu = (Button)findViewById(R.id.id_login);

        //设置监听
        b_fabu.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String chufa = e_chufa.getText().toString();  //获取文本信息
                String mudi = e_mudi.getText().toString();
                final  String email = e_email.getText().toString();
                Order  order = new Order();                             //实例化用户对象
                order.setChufa(chufa);
                order.setMudi(mudi);

                //实现向用户发送信息
                BmobUser.requestEmailVerify(email, new UpdateListener() {
                    public void done(BmobException e) {
                        if (e == null) {
                            Toast.makeText(getApplication(), "邮件已发送" ,Toast.LENGTH_SHORT).show();

                        } else {
                            Toast.makeText(getApplication(), "失败" +e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }
                });

                //用save方法实现发布订单(向后台插入数据)
                order.save(new SaveListener<String>() {
                    @Override
                    public void done(String s, BmobException e) {
                        if (e == null) {
                            Toast.makeText(getApplication(), "发布成功" ,Toast.LENGTH_SHORT).show();

                        } else {
                            Toast.makeText(getApplication(), "失败" +e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }

                });
            }
        });
    }
}

成果展示:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
后台数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述安卓真的极易使人抓狂,捯饬一下安卓后去写高数题都感觉变简单了,最后加入了一张APP启动图片。(手动滑稽)
在这里插入图片描述
共勉!

发布了3 篇原创文章 · 获赞 4 · 访问量 831

猜你喜欢

转载自blog.csdn.net/yf_programmer/article/details/105160299
今日推荐