Android周末 第二周-Bmob實作Android登入注冊和實作Vue圖書管理增删改查
-
- 1.Android 登入注冊修改密碼
-
- 1.demo核心代碼
-
- 1.新增賬號
- 2.登入賬号
- 3.修改密碼
- 2.全部代碼
-
- 第一步,添加Bmob依賴
- 第二步,添權重限和相關配置
- application初始化
- Person實體類
- activity_main.xml代碼
- input_layout.xml
- layout_progress.xml
- title_layout.xml
- 圓形圖檔CircleImageView
- MainActivity代碼
- activity_main2.xml代碼
- MainActivity2代碼
- activity_main3.xml
- MainActivity3
- activity_main4.xml
- MainActivity4
- 3.免費demo源碼
因為官方開發文檔更新,本文僅供參考,實際開發用例以官方為準
1.Android 登入注冊修改密碼
Bmob詳細介紹和使用方法 傳送門
1.demo核心代碼
1.新增賬號
BmobQuery<BmobUser> categoryBmobQuery = new BmobQuery<>();
categoryBmobQuery.addWhereEqualTo("username", mEditText.getText().toString());
categoryBmobQuery.findObjects(new FindListener<BmobUser>() {
@Override
public void done(List<BmobUser> object, BmobException e) {
if (e == null) {
if (object.size()!=0){
// 點選按鈕 代表登入成功
Toast.makeText(MainActivity2.this, "注冊失敗,賬号已存在"+object.size(), Toast.LENGTH_SHORT).show();
}else {
BmobUser user =new BmobUser();
user.setUsername(mEditText.getText().toString());
user.setPassword(mEditText2.getText().toString());
user.signUp(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser user, BmobException e) {
if(e==null)
{
Toast.makeText(MainActivity2.this, "注冊成功!", Toast.LENGTH_SHORT).show();
finish();
}else
{
Log.e("注冊失敗", "原因: ",e );
}
}
});
}
}
}
});
運作,賬号已存在
注冊成功
2.登入賬号
//要延時的程式
String strUsername = mEditText.getText().toString();
String strPassword = mEditText2.getText().toString();
//擷取使用者輸入的賬号和密碼
BmobUser userlogin=new BmobUser();
userlogin.setUsername(strUsername);
userlogin.setPassword(strPassword);
userlogin.login(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser bmobUser, BmobException e) {
if(e==null){
// 點選按鈕 代表登入成功
Intent intent=new Intent(MainActivity.this,MainActivity3.class);
intent.putExtra("key",mEditText.getText().toString());
startActivity(intent);
finish();
Toast.makeText(MainActivity.this,"登入成功",Toast.LENGTH_SHORT).show();
}else {
recovery();
Toast.makeText(MainActivity.this,"賬号或密碼錯誤!",Toast.LENGTH_SHORT).show();
Log.e("登入失敗", "原因: ", e);
}
}
});
運作,登入失敗
登入成功
3.修改密碼
//新密碼
String newPwd = mEditText2.getText().toString();
//舊密碼
String oldPwd = mEditText.getText().toString();
BmobUser.updateCurrentUserPassword(oldPwd, newPwd, new UpdateListener() {
@Override
public void done(BmobException e) {
if (e == null) {
Toast.makeText(MainActivity4.this, "修改成功", Toast.LENGTH_LONG).show();
finish();
} else {
Toast.makeText(MainActivity4.this, "修改失敗:" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
運作,修改成功
再次登入
2.全部代碼
第一步,添加Bmob依賴
//bmob所需依賴
implementation 'cn.bmob.android:bmob-sdk:3.7.8'
implementation "io.reactivex.rxjava2:rxjava:2.2.20"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.okhttp3:okhttp:3.14.1'
implementation 'com.squareup.okio:okio:2.2.2'
implementation 'com.google.code.gson:gson:2.8.5'
第二步,添權重限和相關配置
權限
<!-- 允許聯網 -->
<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" />
允許http請求
application初始化
Myapplication
public class Myapplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//提供以下兩種方式進行初始化操作:
//第一:預設初始化
Bmob.initialize(this, "179b1e34569243c3379fee764060ef0c");
// 注:自v3.5.2開始,資料sdk内部縫合了統計sdk,開發者無需額外內建,傳管道參數即可,不傳預設沒開啟資料統計功能
//Bmob.initialize(this, "Your Application ID","bmob");
//第二:自v3.4.7版本開始,設定BmobConfig,允許設定請求逾時時間、檔案分片上傳時每片的大小、檔案的過期時間(機關為秒),
//BmobConfig config =new BmobConfig.Builder(this)
設定appkey
//.setApplicationId("Your Application ID")
請求逾時時間(機關為秒):預設15s
//.setConnectTimeout(30)
檔案分片上傳時每片的大小(機關位元組),預設512*1024
//.setUploadBlockSize(1024*1024)
檔案的過期時間(機關為秒):預設1800s
//.setFileExpiration(2500)
//.build();
//Bmob.initialize(config);
}
}
Person實體類
public class Person extends BmobObject {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
activity_main.xml代碼
登入主界面
<RelativeLayout 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:background="#7adfb8"
android:fitsSystemWindows="true"
tools:context=".MainActivity" >
<include
android:id="@+id/main_title"
layout="@layout/title_layout" />
<LinearLayout
android:layout_marginTop="40dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_title"
android:orientation="vertical" >
<com.hnucm18jr.myapplication.CircleImageView
android:layout_width="55dip"
android:layout_height="55dip"
android:layout_gravity="center_horizontal"
android:src="@drawable/head" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:gravity="center"
android:text="登入界面"
android:textColor="#ffffff"
android:textSize="36sp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="歡迎使用"
android:textColor="#ffffff"
android:textSize="16sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true" >
<include
android:id="@+id/input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/input_layout" />
<include
android:id="@+id/layout_progress"
android:layout_width="match_parent"
android:layout_height="130dip"
layout="@layout/layout_progress"
android:visibility="gone" />
<TextView
android:id="@+id/main_btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/input_layout"
android:layout_centerInParent="true"
android:layout_marginTop="15dip"
android:background="@drawable/text_bg"
android:gravity="center"
android:paddingBottom="2dip"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:paddingTop="2dip"
android:text="登入"
android:textColor="#ffffff"
android:textSize="20sp" />
</RelativeLayout>
</RelativeLayout>
input_layout.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="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dip"
android:background="@drawable/radius_drawable_bg"
android:orientation="vertical"
android:padding="10dip" >
<LinearLayout
android:id="@+id/input_layout_name"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/user" />
<EditText
android:id="@+id/user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="賬号"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginBottom="5dip"
android:layout_marginTop="5dip"
android:background="#eeeeee" />
<LinearLayout
android:id="@+id/input_layout_psw"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/key" />
<EditText
android:id="@+id/key"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="密碼"
android:inputType="textPassword"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
layout_progress.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="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="20dip"
android:background="@drawable/rotate_layout_bg"
android:orientation="vertical"
android:padding="10dip" >
<ProgressBar
android:id="@+id/progressBar2"
android:layout_width="wrap_content"
android:layout_margin="10dip"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
title_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dip"
android:gravity="center_vertical"
android:padding="10dip" >
<TextView
android:id="@+id/zhuce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:textSize="20sp"
android:text="注冊"
/>
</RelativeLayout>
圓形圖檔CircleImageView
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
public class CircleImageView extends androidx.appcompat.widget.AppCompatImageView {
//畫筆
private Paint mPaint;
//圓形圖檔的半徑
private int mRadius;
//圖檔的宿放比例
private float mScale;
public CircleImageView(Context context) {
super(context);
}
public CircleImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//由于是圓形,寬高應保持一緻
int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
mRadius = size / 2;
setMeasuredDimension(size, size);
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
mPaint = new Paint();
Drawable drawable = getDrawable();
if (null != drawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
//初始化BitmapShader,傳入bitmap對象
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//計算縮放比例
mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());
Matrix matrix = new Matrix();
matrix.setScale(mScale, mScale);
bitmapShader.setLocalMatrix(matrix);
mPaint.setShader(bitmapShader);
//畫圓形,指定好坐标,半徑,畫筆
canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);
} else {
super.onDraw(canvas);
}
}
}
MainActivity代碼
public class MainActivity extends Activity implements View.OnClickListener {
private TextView mBtnLogin,mTextView;
private View progress;
private View mInputLayout;
private float mWidth, mHeight;
private LinearLayout mName, mPsw;
EditText mEditText,mEditText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21){
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
setContentView(R.layout.activity_main);
initView();
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
}
});
}
private void initView() {
mBtnLogin = (TextView) findViewById(R.id.main_btn_login);
progress = findViewById(R.id.layout_progress);
mInputLayout = findViewById(R.id.input_layout);
mName = (LinearLayout) findViewById(R.id.input_layout_name);
mPsw = (LinearLayout) findViewById(R.id.input_layout_psw);
mTextView=findViewById(R.id.zhuce);
mBtnLogin.setOnClickListener(this);
mEditText=findViewById(R.id.user);
mEditText2=findViewById(R.id.key);
}
@Override
public void onClick(View v) {
// 計算出控件的高與寬
mWidth = mBtnLogin.getMeasuredWidth();
mHeight = mBtnLogin.getMeasuredHeight();
// 隐藏輸入框
mName.setVisibility(View.INVISIBLE);
mPsw.setVisibility(View.INVISIBLE);
inputAnimator(mInputLayout, mWidth, mHeight);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//要延時的程式
String strUsername = mEditText.getText().toString();
String strPassword = mEditText2.getText().toString();
//擷取使用者輸入的賬号和密碼
BmobUser userlogin=new BmobUser();
userlogin.setUsername(strUsername);
userlogin.setPassword(strPassword);
userlogin.login(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser bmobUser, BmobException e) {
if(e==null){
// 點選按鈕 代表登入成功
Intent intent=new Intent(MainActivity.this,MainActivity3.class);
intent.putExtra("key",mEditText.getText().toString());
startActivity(intent);
finish();
Toast.makeText(MainActivity.this,"登入成功",Toast.LENGTH_SHORT).show();
}else {
recovery();
Toast.makeText(MainActivity.this,"賬号或密碼錯誤!",Toast.LENGTH_SHORT).show();
Log.e("登入失敗", "原因: ", e);
}
}
});
}
},3000); //8000為毫秒機關
}
/**
* 輸入框的動畫效果
*
* @param view
* 控件
* @param w
* 寬
* @param h
* 高
*/
private void inputAnimator(final View view, float w, float h) {
AnimatorSet set = new AnimatorSet();
ValueAnimator animator = ValueAnimator.ofFloat(0, w);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (Float) animation.getAnimatedValue();
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view
.getLayoutParams();
params.leftMargin = (int) value;
params.rightMargin = (int) value;
view.setLayoutParams(params);
}
});
ObjectAnimator animator2 = ObjectAnimator.ofFloat(mInputLayout,
"scaleX", 1f, 0.5f);
set.setDuration(1000);
set.setInterpolator(new AccelerateDecelerateInterpolator());
set.playTogether(animator, animator2);
set.start();
set.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
/**
* 動畫結束後,先顯示加載的動畫,然後再隐藏輸入框
*/
progress.setVisibility(View.VISIBLE);
progressAnimator(progress);
mInputLayout.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
});
}
/**
* 出現進度動畫
*
* @param view
*/
private void progressAnimator(final View view) {
PropertyValuesHolder animator = PropertyValuesHolder.ofFloat("scaleX",
0.5f, 1f);
PropertyValuesHolder animator2 = PropertyValuesHolder.ofFloat("scaleY",
0.5f, 1f);
ObjectAnimator animator3 = ObjectAnimator.ofPropertyValuesHolder(view,
animator, animator2);
animator3.setDuration(1000);
animator3.setInterpolator(new JellyInterpolator());
animator3.start();
}
public class JellyInterpolator extends LinearInterpolator {
private float factor;
public JellyInterpolator() {
this.factor = 0.15f;
}
@Override
public float getInterpolation(float input) {
return (float) (Math.pow(2, -10 * input)
* Math.sin((input - factor / 4) * (2 * Math.PI) / factor) + 1);
}
}
/**
* 恢複初始狀态
*/
private void recovery() {
progress.setVisibility(View.GONE);
mInputLayout.setVisibility(View.VISIBLE);
mName.setVisibility(View.VISIBLE);
mPsw.setVisibility(View.VISIBLE);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mInputLayout.getLayoutParams();
params.leftMargin = 0;
params.rightMargin = 0;
mInputLayout.setLayoutParams(params);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(mInputLayout, "scaleX", 0.5f,1f );
animator2.setDuration(500);
animator2.setInterpolator(new AccelerateDecelerateInterpolator());
animator2.start();
}
}
activity_main2.xml代碼
注冊主界面
<?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:background="#7adfb8"
android:fitsSystemWindows="true"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="15dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="15dp"
android:src="@drawable/fanhu" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:text="注冊界面"
android:textColor="#ffffff"
android:textSize="36sp"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dip"
android:background="@drawable/radius_drawable_bg"
android:orientation="vertical"
android:padding="10dip"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.32999998"
tools:layout_editor_absoluteX="20dp">
<LinearLayout
android:id="@+id/input_layout_name"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/user" />
<EditText
android:id="@+id/user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="賬号"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:background="#eeeeee" />
<LinearLayout
android:id="@+id/input_layout_psw"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/key" />
<EditText
android:id="@+id/key"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="密碼"
android:inputType="textPassword"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/main_btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/input_layout"
android:layout_centerInParent="true"
android:background="@drawable/text_bg"
android:gravity="center"
android:paddingLeft="15dip"
android:paddingTop="2dip"
android:paddingRight="15dip"
android:paddingBottom="2dip"
android:text="确定"
android:textColor="#ffffff"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity2代碼
public class MainActivity2 extends AppCompatActivity {
EditText mEditText,mEditText2;
TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21){
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
setContentView(R.layout.activity_main2);
mEditText=findViewById(R.id.user);
mEditText2=findViewById(R.id.key);
mTextView=findViewById(R.id.main_btn_login);
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BmobQuery<BmobUser> categoryBmobQuery = new BmobQuery<>();
categoryBmobQuery.addWhereEqualTo("username", mEditText.getText().toString());
categoryBmobQuery.findObjects(new FindListener<BmobUser>() {
@Override
public void done(List<BmobUser> object, BmobException e) {
if (e == null) {
if (object.size()!=0){
// 點選按鈕 代表登入成功
Toast.makeText(MainActivity2.this, "注冊失敗,賬号已存在"+object.size(), Toast.LENGTH_SHORT).show();
}else {
BmobUser user =new BmobUser();
user.setUsername(mEditText.getText().toString());
user.setPassword(mEditText2.getText().toString());
user.signUp(new SaveListener<BmobUser>() {
@Override
public void done(BmobUser user, BmobException e) {
if(e==null)
{
Toast.makeText(MainActivity2.this, "注冊成功!", Toast.LENGTH_SHORT).show();
finish();
}else
{
Log.e("注冊失敗", "原因: ",e );
}
}
});
}
}
}
});
}
});
}
}
activity_main3.xml
登入成功界面
<?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:background="#7adfb8"
android:fitsSystemWindows="true"
android:layout_height="match_parent"
tools:context=".MainActivity3">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:text="歡迎使用"
android:textColor="#ffffff"
android:textSize="36sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.24000001" />
<TextView
android:id="@+id/main_btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/input_layout"
android:layout_centerInParent="true"
android:background="@drawable/text_bg"
android:gravity="center"
android:paddingLeft="15dip"
android:paddingTop="2dip"
android:paddingRight="15dip"
android:paddingBottom="2dip"
android:text="修改密碼"
android:textColor="#ffffff"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tuichu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/input_layout"
android:layout_centerInParent="true"
android:background="@drawable/text_bg"
android:gravity="center"
android:paddingLeft="15dip"
android:paddingTop="2dip"
android:paddingRight="15dip"
android:paddingBottom="2dip"
android:text="退出"
android:textColor="#ffffff"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.62" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity3
public class MainActivity3 extends AppCompatActivity {
TextView mTextView,mTextView2,mTextView3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21){
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
setContentView(R.layout.activity_main3);
mTextView=findViewById(R.id.main_btn_login);
mTextView2=findViewById(R.id.textView);
mTextView3=findViewById(R.id.tuichu);
mTextView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity3.this,MainActivity.class);
startActivity(intent);
finish();
}
});
String s = getIntent().getStringExtra("key");
mTextView2.setText("歡迎你 "+s);
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity3.this,MainActivity4.class);
intent.putExtra("key",s);
startActivity(intent);
}
});
}
}
activity_main4.xml
修改密碼界面
<?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:background="#7adfb8"
android:fitsSystemWindows="true"
android:layout_height="match_parent"
tools:context=".MainActivity4">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="15dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="15dp"
android:src="@drawable/fanhu" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:text="修改密碼"
android:textColor="#ffffff"
android:textSize="36sp"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dip"
android:background="@drawable/radius_drawable_bg"
android:orientation="vertical"
android:padding="10dip"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.32999998"
tools:layout_editor_absoluteX="20dp">
<LinearLayout
android:id="@+id/input_layout_name"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/user" />
<TextView
android:id="@+id/user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="賬号"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:background="#eeeeee" />
<LinearLayout
android:id="@+id/input_layout_psw"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/key" />
<EditText
android:id="@+id/key1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="舊密碼"
android:inputType="textPassword"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/input_layout_psw1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/key" />
<EditText
android:id="@+id/key"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:background="#00000000"
android:hint="新密碼"
android:inputType="textPassword"
android:padding="5dip"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/main_btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/input_layout"
android:layout_centerInParent="true"
android:background="@drawable/text_bg"
android:gravity="center"
android:paddingLeft="15dip"
android:paddingTop="2dip"
android:paddingRight="15dip"
android:paddingBottom="2dip"
android:text="确定"
android:textColor="#ffffff"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity4
public class MainActivity4 extends AppCompatActivity {
TextView mTextView,mTextView2;
EditText mEditText,mEditText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21){
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
setContentView(R.layout.activity_main4);
mTextView=findViewById(R.id.user);
mEditText=findViewById(R.id.key1);
mEditText2=findViewById(R.id.key);
mTextView2=findViewById(R.id.main_btn_login);
String s = getIntent().getStringExtra("key");
mTextView.setText(s);
mTextView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//新密碼
String newPwd = mEditText2.getText().toString();
//舊密碼
String oldPwd = mEditText.getText().toString();
BmobUser.updateCurrentUserPassword(oldPwd, newPwd, new UpdateListener() {
@Override
public void done(BmobException e) {
if (e == null) {
Toast.makeText(MainActivity4.this, "修改成功", Toast.LENGTH_LONG).show();
finish();
} else {
Toast.makeText(MainActivity4.this, "修改失敗:" + e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
});
}
}
3.免費demo源碼
https://download.csdn.net/download/qq_46526828/13991522
部落客為了可以學到更多的Android知識,建立了一個安卓知識交流群,歡迎大佬入群,當然也歡迎和我一樣的安卓小白,我們可以一起交流,最重要的是快樂水群,記得定個小目标,沖擊bat