有朋友问到,为什么使用第三方Bmob进行注册的时候返回用户为空,user=null这种情况?
我想必然是你的Javabean中定义了一个username和password与Bmob固定的接口冲突了,不让你成功返回。原因如图,Bmob有自己的_User表,不需要重复定义,只需要调用即可完成注册和登陆:
先是简单xml文件。activity_userpager.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=".UserLogin.Userpager">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="15dp"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_marginRight="5dp"
android:text="账 号:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/username"
android:padding="3dp"
android:layout_marginBottom="5dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_marginRight="5dp"
android:text="密 码:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/userpassword"
android:inputType="textPassword"
android:padding="3dp"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="忘记密码?"
android:layout_gravity="right"
android:layout_marginTop="10dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/login"
android:onClick="login"
android:layout_marginTop="50dp"
android:background="@drawable/tabtop2"
android:textColor="#000"
android:text="登 陆"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@drawable/tabtop"
android:layout_marginTop="20dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="100dp"
android:gravity="center_horizontal">
<Button
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="点击注册"
android:textColor="#000"
android:onClick="register"
android:background="@drawable/tabtop2"
android:id="@+id/register"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
activity_user_register.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=".UserLogin.Userpager">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="15dp"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_marginRight="5dp"
android:text="账 号:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/username"
android:padding="3dp"
android:layout_marginBottom="5dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_marginRight="5dp"
android:text="密 码:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/userpassword"
android:padding="3dp"
android:inputType="textPassword"
android:layout_marginBottom="5dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_marginRight="5dp"
android:text="邮 箱:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/email"
android:padding="3dp"
android:inputType="textEmailAddress"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="忘记密码?"
android:layout_gravity="right"
android:layout_marginTop="10dp"/>
<Button
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/register"
android:layout_marginTop="50dp"
android:background="@drawable/tabtop2"
android:textColor="#000"
android:onClick="register"
android:clickable="true"
android:text="点击注册"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@drawable/tabtop"
android:layout_marginTop="20dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:gravity="center"
android:layout_weight="1">
</LinearLayout>
</LinearLayout>
一样,Userpager.java
UserRegister.javaimport android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.app.Activity; import android.os.Handler; import android.os.Message; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.imooc.campusproject.MainActivity; import com.imooc.campusproject.R; import cn.bmob.v3.BmobUser; import cn.bmob.v3.listener.SaveListener; public class Userpager extends Activity { EditText username; EditText password; private static int FINISH=1; ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_userpager); getActionBar().setDisplayHomeAsUpEnabled(true); findViews(); } private void findViews() { username=(EditText) findViewById(R.id.username); password=(EditText) findViewById(R.id.userpassword); progressDialog=new ProgressDialog(this); progressDialog.setTitle("信息提示"); progressDialog.setMessage("正在加载中,请稍后..."); progressDialog.setCancelable(true); } public void register(View v){ Intent i=new Intent(Userpager.this,UserRegister.class); startActivity(i); } public void login(View view){ new Thread(new HandThread()).start();//开启子线程 progressDialog.show();//打开进度加载 } //设置一下actionBar返回事件 @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId()==android.R.id.home){ finish(); return true; } return super.onOptionsItemSelected(item); } private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==FINISH){ final String name=username.getText().toString(); String psd=password.getText().toString(); final BmobUser user=new BmobUser(); user.setUsername(name); user.setPassword(psd); user.login(Userpager.this, new SaveListener() { @Override public void onSuccess() { if (user.getUsername().equals(name)){ Toast.makeText(Userpager.this, "登陆成功", Toast.LENGTH_SHORT).show(); Intent intent=new Intent(Userpager.this,MainActivity.class); intent.putExtra("user_name",name); startActivity(intent); progressDialog.dismiss();//结束进度加载 }else { Toast.makeText(Userpager.this, "账号未验证(⊙﹏⊙)", Toast.LENGTH_SHORT).show(); progressDialog.dismiss();//结束进度加载 } } @Override public void onFailure(int i, String s) { AlertDialog.Builder builder = new AlertDialog.Builder(Userpager.this,AlertDialog.THEME_HOLO_DARK); builder.setTitle("信息提示"); builder.setIcon(R.drawable.alertdialog); builder.setMessage("账号或密码输入错误!"); builder.setPositiveButton("确定",null); builder.show(); progressDialog.dismiss();//结束进度加载 } }); } } }; private class HandThread implements Runnable { @Override public void run() { Message msg=Message.obtain(); msg.what=FINISH; try { Thread.sleep(1000);//缓冲1s } catch (InterruptedException e) { e.printStackTrace(); } handler.sendMessage(msg);//发送并处理 } } }
import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.app.Activity; import android.os.Handler; import android.os.Message; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.imooc.campusproject.JavaBean.UserRegisterInfo; import com.imooc.campusproject.R; import cn.bmob.v3.listener.SaveListener; public class UserRegister extends Activity { EditText username,password,email; private static int FINISH=1; ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_register); findViews(); getActionBar().setDisplayHomeAsUpEnabled(true); } public void register(View view){ new Thread(new HandThread()).start();//开启子线程 progressDialog.show();//打开进度加载 } private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==FINISH){ //拿到对应输入文本 String name = username.getText().toString().trim(); String pass = password.getText().toString().trim(); String user_email=email.getText().toString().trim(); if (name.equals("") || pass.equals("") || user_email.equals("")){ AlertDialog.Builder builder = new AlertDialog.Builder(UserRegister.this,AlertDialog.THEME_HOLO_DARK); builder.setTitle("信息提示"); builder.setMessage("用户名或密码,邮箱未填写!"); builder.setIcon(R.drawable.alertdialog); builder.setPositiveButton("返回",null); builder.show(); return; } UserRegisterInfo user=new UserRegisterInfo(); user.setUsername(name); user.setPassword(pass); user.setEmail(user_email); user.signUp(UserRegister.this, new SaveListener() { @Override public void onSuccess() { Toast.makeText(UserRegister.this, "注册成功,赶快去登陆吧!", Toast.LENGTH_SHORT).show(); Intent intent=new Intent(UserRegister.this,Userpager.class); startActivity(intent); } @Override public void onFailure(int i, String s) { AlertDialog.Builder builder = new AlertDialog.Builder(UserRegister.this,AlertDialog.THEME_HOLO_DARK); builder.setTitle("信息提示"); builder.setMessage("注册失败,请检查网络!"); builder.setIcon(R.drawable.alertdialog); builder.setPositiveButton("确定",null); builder.show(); } }); } } }; private class HandThread implements Runnable { @Override public void run() { Message msg=Message.obtain(); msg.what=FINISH; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendMessage(msg);//发送至handler } } //实例化控件 private void findViews() { username=(EditText) findViewById(R.id.username); password=(EditText) findViewById(R.id.userpassword); email= (EditText) findViewById(R.id.email); progressDialog=new ProgressDialog(this); progressDialog.setTitle("信息提示"); progressDialog.setMessage("正在加载中,请稍后..."); progressDialog.setCancelable(true); } //返回事件 @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId()==android.R.id.home){ finish(); return true; } return super.onOptionsItemSelected(item); } }
最后,不要忘记添加BmobSDK的权限。要点:Bmob的注册必须使用它自带的接口_User表中的方法进行注册。