Android之Bmob移動後端雲伺服器

来源:https://www.cnblogs.com/cmusketeer/archive/2018/01/16/8296067.html
-Advertisement-
Play Games

源碼下載:http://download.csdn.net/download/jjhahage/10034519 PS:一般情況下,我們在寫android程式的時候,想要實現登錄註冊功能,可以選擇自己用servlet作為服務端來實現過濾沒有註冊過的用戶,但是太麻煩,而且不是隨時都可以用的。這裡介紹一 ...


源碼下載:http://download.csdn.net/download/jjhahage/10034519

PS:一般情況下,我們在寫android程式的時候,想要實現登錄註冊功能,可以選擇自己用servlet作為服務端來實現過濾沒有註冊過的用戶,但是太麻煩,而且不是隨時都可以用的。這裡介紹一個移動後端雲伺服器平臺bmob,這不僅可以實現雲資料庫儲存,還可以獲取手機驗證等,隨時隨地都很輕鬆,下麵寫一個小demo,實現一個登陸註冊功能,認識增刪查改。下麵我稍微寫一個例子,簡單實現註冊登錄功能。

1:首先到bmob官網,註冊一個賬號,裡面創建一個項目,如圖:

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'

 

 

位置如圖:


(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"}

 

 

(4:)初始化:

 

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 onError(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","更改成功");
                                    }
                                }

 

效果圖:

 




 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • linux 進行mysql安裝 # yum -y install make gcc-c++ cmake bison-devel ncurses-devel // 安裝編譯代碼需要的包 # wget http://www.mysql.com/Downloads/MySQL-5.6/mysql-5.6. ...
  • 1、人工管理階段 2、文件系統階段 3、資料庫階段 資料庫管理技術進入資料庫階段的標誌是20世紀60年代末的三件大事: 資料庫階段的數據管理具有以下特點: 4、高級資料庫階段 高級資料庫階段的主要標誌是20世紀80年代的分散式資料庫系統,90年代的對象資料庫系統以及21世紀的Web資料庫系統 ...
  • 表的基本連接 SQL的一個重要特性就是能通過JOIN關鍵詞,從多個交叉表中查詢、分析數據。 連接表的目的 在關係資料庫中,數據表設計的一個重要原則就是要避免冗餘性。 學習本節需要的數據表: CREATE TABLE TEACHER ( ID INT IDENTITY (1,1) PRIMARY KE ...
  • 前言 最近把代碼從csdn轉移到gitee後,每一次git push都需要輸入用戶名和密碼,比較麻煩,那有沒有一個辦法可以去掉這個步驟呢? 原因 每次都需要輸入用戶名和密碼是因為你採用的是https方式提交代碼,如果採用的是ssh方式只需要在版本庫中添加用戶的sha的key就可以實現提交時無需輸入用 ...
  • 在動態給android的字體設置大小的時候,踩過一些坑,特地列出來提醒大家。 1、直接setTextSize(),裡面的單位是預設sp的。 2、 在自定義view的時候,會用到自定義屬性,獲取自定義的字體大小,如上面代碼所示。但是按照這種方式取出來的單位是px的,因此不能直接給setTextSize ...
  • getDimension() 返回float型px值 精確 getDimensionPixelOffset() 返回int型px值 直接把小數刪除 getDimensionPixelSize() 返回int型px值 進行四捨五入 ...
  • 今天在做項目的時候自定義了一個View,繼承了LinearLayout,結果,裡面的onDraw()方法一直無法被調用。 後來發現ViewGroup是預設不調用onDraw()方法的。 原因我們暫且不去深究,有一個很簡單的解決方法,那就是不要重寫onDraw()方法,而是重寫下麵的方法: 在該方法里 ...
  • 很多時候,我們需要獲取別人的apk的信息。但是我們看不到apk的代碼,對於apk的信息並沒有直接的方法獲取。那麼,我們要怎麼獲取apk信息呢? 這裡,我整理了兩個方法,親測可用。 第一種,直接使用Android Studiod打開第三方apk,查看AndroidManifest.xml,可以查看大部 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...