zoukankan      html  css  js  c++  java
  • andoird软件开发之一个记录账号密码的APP--bmob后台

    1.app功能:通过注册登录账户,拥有一个账户本,能够将平时自己容易的忘记的账户记录下来,并可以保持到云端,不需要担心数据丢失,只要登录账户,便可获取到自己的账户本。

    2.实现的效果图,如下:

    以下界面分别为注册界面、登录界面、提交账户内容界面、账户列表界面、长按删除账户信息、具体账户内容信息

            

             

    3.实现的工程目录如下:

    4.实现的具体过程:

    a.布局代码:

    (1)登录界面图:activity_main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:background="#ffffff"
     5     android:weightSum="5"
     6     android:orientation="vertical"
     7     android:layout_width="match_parent"
     8     android:layout_height="match_parent"
     9     tools:context="base.secret.MainActivity">
    10     <LinearLayout
    11         android:layout_weight="2"
    12         android:layout_width="match_parent"
    13         android:layout_height="0dp"/>
    14     <base.secret.TextInputLayout
    15         android:layout_marginRight="20dp"
    16         android:layout_marginLeft="20dp"
    17         android:gravity="center_vertical"
    18         android:id="@+id/edit_user"
    19         android:layout_width="match_parent"
    20         android:layout_height="wrap_content">
    21         <EditText
    22             android:textSize="20sp"
    23             android:hint="@string/login_user"
    24             android:gravity="center"
    25             android:layout_width="match_parent"
    26             android:layout_height="wrap_content" />
    27     </base.secret.TextInputLayout>
    28     <base.secret.TextInputLayout
    29         android:layout_marginRight="20dp"
    30         android:layout_marginLeft="20dp"
    31         android:layout_marginTop="20dp"
    32         android:id="@+id/edit_psw"
    33         android:layout_width="match_parent"
    34         android:layout_height="wrap_content">
    35         <EditText
    36             android:inputType="textPassword"
    37             android:textSize="20sp"
    38             android:hint="@string/user_psw"
    39             android:gravity="center"
    40             android:layout_width="match_parent"
    41             android:layout_height="wrap_content" />
    42     </base.secret.TextInputLayout>
    43     <LinearLayout
    44         android:layout_marginTop="20dp"
    45         android:gravity="center"
    46         android:orientation="horizontal"
    47         android:layout_width="match_parent"
    48         android:layout_height="wrap_content">
    49         <Button
    50             android:textSize="25sp"
    51             android:text="@string/login"
    52             android:id="@+id/btn_login"
    53             android:layout_width="wrap_content"
    54             android:layout_height="wrap_content" />
    55         <Button
    56             android:layout_marginLeft="20dp"
    57             android:textSize="25sp"
    58             android:text="@string/register"
    59             android:id="@+id/btn_register"
    60             android:layout_width="wrap_content"
    61             android:layout_height="wrap_content" />
    62     </LinearLayout>
    63 </LinearLayout>
    View Code

     (2)注册界面:register.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout
     3     android:weightSum="3"
     4     xmlns:android="http://schemas.android.com/apk/res/android"
     5     android:orientation="vertical"
     6     android:layout_width="match_parent"
     7     android:layout_height="match_parent">
     8     <LinearLayout
     9         android:layout_weight="1"
    10         android:layout_width="wrap_content"
    11         android:layout_height="0dp"/>
    12     <base.secret.TextInputLayout
    13         android:layout_marginTop="20dp"
    14         android:layout_marginRight="20dp"
    15         android:layout_marginLeft="20dp"
    16         android:gravity="center_vertical"
    17         android:id="@+id/register_user"
    18         android:layout_width="match_parent"
    19         android:layout_height="wrap_content">
    20         <EditText
    21             android:textSize="20sp"
    22             android:hint="@string/user_name"
    23             android:gravity="center"
    24             android:layout_width="match_parent"
    25             android:layout_height="wrap_content" />
    26     </base.secret.TextInputLayout>
    27     <base.secret.TextInputLayout
    28         android:layout_marginRight="20dp"
    29         android:layout_marginLeft="20dp"
    30         android:layout_marginTop="20dp"
    31         android:id="@+id/register_psw"
    32         android:layout_width="match_parent"
    33         android:layout_height="wrap_content">
    34         <EditText
    35             android:textSize="20sp"
    36             android:inputType="textPassword"
    37             android:hint="@string/user_psw"
    38             android:gravity="center"
    39             android:layout_width="match_parent"
    40             android:layout_height="wrap_content" />
    41     </base.secret.TextInputLayout>
    42     <base.secret.TextInputLayout
    43         android:layout_marginRight="20dp"
    44         android:layout_marginLeft="20dp"
    45         android:layout_marginTop="20dp"
    46         android:id="@+id/register_again_psw"
    47         android:layout_width="match_parent"
    48         android:layout_height="wrap_content">
    49         <EditText
    50             android:textSize="20sp"
    51             android:hint="@string/again_psw"
    52             android:inputType="textPassword"
    53             android:gravity="center"
    54             android:layout_width="match_parent"
    55             android:layout_height="wrap_content" />
    56     </base.secret.TextInputLayout>
    57     <Button
    58         android:layout_marginTop="20dp"
    59         android:textSize="25sp"
    60         android:layout_gravity="center_horizontal"
    61         android:text="@string/register"
    62         android:id="@+id/btn_register2"
    63         android:layout_width="wrap_content"
    64         android:layout_height="wrap_content" />
    65 </LinearLayout>
    View Code

    (3)列表界面:activity_list.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:orientation="vertical"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent">
     7     <Button
     8         android:layout_gravity="center"
     9         android:layout_marginTop="20dp"
    10         android:textSize="20sp"
    11         android:text="@string/btn_add"
    12         android:id="@+id/btn_add"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content" />
    15     <ListView
    16         android:layout_marginTop="10dp"
    17         android:id="@+id/list"
    18         android:layout_width="match_parent"
    19         android:layout_height="wrap_content">
    20 
    21     </ListView>
    22 
    23 </LinearLayout>
    View Code

    (4)列表中加载的布局:item.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:orientation="vertical"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent">
     7     <TextView
     8         android:id="@+id/text_item"
     9         android:layout_marginTop="20dp"
    10         android:layout_marginLeft="20dp"
    11         android:textSize="25sp"
    12         android:layout_width="match_parent"
    13         android:layout_height="wrap_content" />
    14 </LinearLayout>
    View Code

    (5)添加账户页面:activity_add.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:weightSum="3"
     5     android:orientation="vertical"
     6     android:layout_width="match_parent"
     7     android:layout_height="match_parent">
     8     <LinearLayout
     9         android:layout_weight="1"
    10         android:layout_width="wrap_content"
    11         android:layout_height="0dp"/>
    12     <base.secret.TextInputLayout
    13         android:layout_marginTop="20dp"
    14         android:layout_marginRight="20dp"
    15         android:layout_marginLeft="20dp"
    16         android:gravity="center_vertical"
    17         android:id="@+id/commit_content"
    18         android:layout_width="match_parent"
    19         android:layout_height="wrap_content">
    20         <EditText
    21             android:textSize="20sp"
    22             android:hint="@string/more_message"
    23             android:gravity="center"
    24             android:layout_width="match_parent"
    25             android:layout_height="wrap_content" />
    26     </base.secret.TextInputLayout>
    27     <base.secret.TextInputLayout
    28         android:layout_marginTop="20dp"
    29         android:layout_marginRight="20dp"
    30         android:layout_marginLeft="20dp"
    31         android:gravity="center_vertical"
    32         android:id="@+id/commit_user"
    33         android:layout_width="match_parent"
    34         android:layout_height="wrap_content">
    35         <EditText
    36             android:textSize="20sp"
    37             android:hint="@string/login_user"
    38             android:gravity="center"
    39             android:layout_width="match_parent"
    40             android:layout_height="wrap_content" />
    41     </base.secret.TextInputLayout>
    42     <base.secret.TextInputLayout
    43         android:layout_marginRight="20dp"
    44         android:layout_marginLeft="20dp"
    45         android:layout_marginTop="20dp"
    46         android:id="@+id/commit_psw"
    47         android:layout_width="match_parent"
    48         android:layout_height="wrap_content">
    49         <EditText
    50             android:textSize="20sp"
    51             android:hint="@string/user_psw"
    52             android:gravity="center"
    53             android:layout_width="match_parent"
    54             android:layout_height="wrap_content" />
    55     </base.secret.TextInputLayout>
    56     <Button
    57         android:layout_marginTop="20dp"
    58         android:textSize="25sp"
    59         android:layout_gravity="center_horizontal"
    60         android:text="@string/commit"
    61         android:id="@+id/btn_commit"
    62         android:layout_width="wrap_content"
    63         android:layout_height="wrap_content" />
    64 </LinearLayout>
    View Code

    (6)账户具体信息页面:activity_detail.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout
     3     xmlns:android="http://schemas.android.com/apk/res/android"
     4     android:orientation="vertical"
     5     android:weightSum="2"
     6     android:paddingLeft="20dp"
     7     android:layout_width="match_parent"
     8     android:layout_height="match_parent">
     9     <LinearLayout
    10         android:layout_weight="1"
    11         android:layout_width="match_parent"
    12         android:layout_height="0dp"/>
    13     <TextView
    14         android:text="@string/user"
    15         android:textSize="18sp"
    16         android:layout_width="match_parent"
    17         android:layout_height="wrap_content" />
    18     <TextView
    19         android:layout_marginTop="10dp"
    20         android:id="@+id/text_username"
    21         android:textSize="25sp"
    22         android:layout_width="match_parent"
    23         android:layout_height="wrap_content" />
    24     <TextView
    25         android:layout_marginTop="20dp"
    26         android:text="@string/psw"
    27         android:textSize="18sp"
    28         android:layout_width="match_parent"
    29         android:layout_height="wrap_content" />
    30     <TextView
    31         android:layout_marginTop="10dp"
    32         android:textSize="30sp"
    33         android:id="@+id/text_psw"
    34         android:layout_width="match_parent"
    35         android:layout_height="wrap_content" />
    36 </LinearLayout>
    View Code

    b.实现代码:

    (1)主界面:MainActivity——主要是实现跳转页面的功能和利用BmobUser对象判断用户名登录是否正确:

     1 package base.secret;
     2 
     3 import android.app.Activity;
     4 import android.content.Intent;
     5 import android.os.Bundle;
     6 import android.support.annotation.MainThread;
     7 import android.support.design.widget.*;
     8 import android.support.design.widget.TextInputLayout;
     9 import android.view.View;
    10 import android.view.Window;
    11 import android.widget.Toast;
    12 
    13 import cn.bmob.v3.Bmob;
    14 import cn.bmob.v3.BmobQuery;
    15 import cn.bmob.v3.BmobUser;
    16 import cn.bmob.v3.exception.BmobException;
    17 import cn.bmob.v3.listener.SaveListener;
    18 
    19 public class MainActivity extends Activity implements View.OnClickListener {
    20     private android.support.design.widget.TextInputLayout editName,editPsw;
    21 //此处定义自己app的ID
    22     private String ID="";
    23     @Override
    24     protected void onCreate(Bundle savedInstanceState) {
    25         super.onCreate(savedInstanceState);
    26         this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    27         setContentView(R.layout.activity_main);
    28         Bmob.initialize(MainActivity.this,ID);
    29         editName=(TextInputLayout)findViewById(R.id.edit_user);
    30         editPsw=(TextInputLayout)findViewById(R.id.edit_psw);
    31         findViewById(R.id.btn_login).setOnClickListener(this);
    32         findViewById(R.id.btn_register).setOnClickListener(this);
    33     }
    34 
    35     @Override
    36     public void onClick(View v) {
    37         switch (v.getId()){
    38             case R.id.btn_login:
    39                 editName.setError("");
    40                 editPsw.setError("");
    41                 Login();
    42                 break;
    43             case R.id.btn_register:
    44                 Intent intentRegister=new Intent(MainActivity.this,RegisterActivity.class);
    45                 startActivity(intentRegister);
    46                 break;
    47         }
    48     }
    49     private void Login(){
    50         String name=editName.getEditText().getText().toString();
    51         String psw=editPsw.getEditText().getText().toString();
    52         if (name.equals("")){
    53             editName.setError("用户名不能为空");
    54             editName.requestFocus();
    55             return ;
    56         }else if (psw.equals("")){
    57             editPsw.setError("密码不能为空");
    58             editPsw.requestFocus();
    59             return ;
    60         }
    61         //获取一个BmobUser对象,调用login函数,如果登录成功,跳转到列表界面,否则提示错误
    62         BmobUser user=new BmobUser();
    63         user.setUsername(name);
    64         user.setPassword(psw);
    65         user.login(new SaveListener<BmobUser>() {
    66             @Override
    67             public void done(BmobUser bmobUser, BmobException e) {
    68                 if (e==null){
    69                     Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
    70                     Intent i=new Intent(MainActivity.this,ListActivity.class);
    71                     startActivity(i);
    72                 }else{
    73                     Toast.makeText(MainActivity.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
    74                 }
    75             }
    76         });
    77     }
    78 }
    View Code

    (2)注册界面:RegisterActivity——主要实现用户名注册,获取到用户输入的数据,并上传到云端

     1 package base.secret;
     2 
     3 import android.app.Activity;
     4 import android.content.Intent;
     5 import android.os.Bundle;
     6 import android.support.design.widget.TextInputLayout;
     7 import android.view.View;
     8 import android.view.Window;
     9 import android.widget.Toast;
    10 
    11 import cn.bmob.v3.Bmob;
    12 import cn.bmob.v3.BmobUser;
    13 import cn.bmob.v3.exception.BmobException;
    14 import cn.bmob.v3.listener.SaveListener;
    15 
    16 
    17 public class RegisterActivity extends Activity implements View.OnClickListener {
    18     private String ID="";
    19     private android.support.design.widget.TextInputLayout editName,editPsw,editAgainPsw;
    20     @Override
    21     protected void onCreate(Bundle savedInstanceState) {
    22         super.onCreate(savedInstanceState);
    23         this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    24         setContentView(R.layout.activity_register);
    25         Bmob.initialize(RegisterActivity.this,ID);
    26         editName=(TextInputLayout)findViewById(R.id.register_user);
    27         editPsw=(TextInputLayout)findViewById(R.id.register_psw);
    28         editAgainPsw=(TextInputLayout)findViewById(R.id.register_again_psw);
    29         findViewById(R.id.btn_register2).setOnClickListener(this);
    30     }
    31 
    32     @Override
    33     public void onClick(View v) {
    34         String name=editName.getEditText().getText().toString();
    35         String psw=editPsw.getEditText().getText().toString();
    36         String psw_again=editAgainPsw.getEditText().getText().toString();
    37         editName.setError("");
    38         editPsw.setError("");
    39         editAgainPsw.setError("");
    40         if (isValid(name,psw,psw_again))  storeUserMessage(name,psw);
    41     }
    42     public void storeUserMessage(String name,String psw){
    43         //保存用户信息到云端
    44         BmobUser user=new BmobUser();
    45         user.setUsername(name);
    46         user.setPassword(psw);
    47         user.signUp(new SaveListener<BmobUser>() {
    48             @Override
    49             public void done(BmobUser bmobUser, BmobException e) {
    50                 if (e==null){
    51                     Toast.makeText(RegisterActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
    52                     Intent i=new Intent(RegisterActivity.this,MainActivity.class);
    53                     startActivity(i);
    54                 }else{
    55                     Toast.makeText(RegisterActivity.this,e.getMessage(),Toast.LENGTH_SHORT).show();
    56                 }
    57             }
    58         });
    59     }
    60 
    61     public boolean isValid(String name,String psw1,String psw2){
    62         if (name.equals("")){
    63             editName.setError("用户名不能为空");
    64             return false;
    65             //判断用户名是否为数字和字母
    66         }else if (!name.matches("^[a-zA-Z0-9]+$")){
    67             editName.setError("用户名只能包含字母和数字");
    68             return false;
    69         }
    70         else if (psw1.equals("")){
    71             editPsw.setError("密码不能为空");
    72             return false;
    73         }else if (psw2.equals("")){
    74             editAgainPsw.setError("密码不能为空");
    75             return false;
    76         }
    77         if (psw1.equals(psw2)) return true;
    78         else{
    79             editAgainPsw.setError("密码不一致");
    80             return false;
    81         }
    82     }
    83 
    84 
    85 
    86 }
    View Code

    (3)建立一个UserMessage类来保存数据,主要含有用户名,密码和相关信息,因为要将数据上传到云端,所以该类要继承bmob的一个BmobObject对象。

     1 package base.secret;
     2 import cn.bmob.v3.BmobObject;
     3 public class UserMessage extends BmobObject {
     4     private String user;
     5     private String psw;
     6     private String message;
     7     public UserMessage(){
     8     }
     9     public UserMessage(String user, String psw, String message) {
    10         this.user = user;
    11         this.psw = psw;
    12         this.message = message;
    13     }
    14     public UserMessage(String tableName, String user, String psw, String message) {
    15         this.user = user;
    16         this.psw = psw;
    17         this.message = message;
    18         this.setTableName(tableName);
    19     }
    20     public String getUser() {
    21         return user;
    22     }
    23     public void setUser(String user) {
    24         this.user = user;
    25     }
    26     public String getPsw() {
    27         return psw;
    28     }
    29     public void setPsw(String psw) {
    30         this.psw = psw;
    31     }
    32     public String getMessage() {
    33         return message;
    34     }
    35     public void setMessage(String message) {
    36         this.message = message;
    37     }
    38 }
    View Code

    (4)建立完后,我们要自定义一个适配器UserAdapter去加载数据到列表界面中:

     1 package base.secret;
     2 
     3 import android.content.Context;
     4 import android.view.LayoutInflater;
     5 import android.view.View;
     6 import android.view.ViewGroup;
     7 import android.widget.ArrayAdapter;
     8 import android.widget.TextView;
     9 import java.util.List;
    10 public class UserAdapter extends ArrayAdapter<UserMessage>{
    11     private  int resourceId;
    12     public UserAdapter(Context context, int resource, List<UserMessage> objects) {
    13         super(context, resource, objects);
    14         resourceId=resource;
    15     }
    16     @Override
    17     public View getView(int position, View convertView, ViewGroup parent) {
    18         UserMessage message=getItem(position);
    19         View view;
    20         //将布局文件解析为view的方法
    21         view= LayoutInflater.from(getContext()).inflate(resourceId,null);
    22         TextView textView=(TextView)view.findViewById(R.id.text_item);
    23         textView.setText(message.getMessage());
    24         return view;
    25     }
    26 }
    View Code

    (5)添加账户界面:AddActivity——主要实现获取到用户输入的信息,然后保存到云端中,这里涉及到一个bmob的使用问题,按理我们应该为每个用户都创建一个表来存储用户的信息,为了更好地从bmob云端获取到数据,我这里设置用户名作为表名,而且设置了用户名为唯一键,即不可重复。

     1 package base.secret;
     2 import android.app.Activity;
     3 import android.content.Intent;
     4 import android.os.Bundle;
     5 import android.support.design.widget.*;
     6 import android.support.design.widget.TextInputLayout;
     7 import android.util.Log;
     8 import android.view.View;
     9 import android.view.Window;
    10 import android.widget.Toast;
    11 
    12 import java.util.List;
    13 
    14 import cn.bmob.v3.Bmob;
    15 import cn.bmob.v3.BmobObject;
    16 import cn.bmob.v3.BmobUser;
    17 import cn.bmob.v3.exception.BmobException;
    18 import cn.bmob.v3.listener.SaveListener;
    19 import cn.bmob.v3.listener.UpdateListener;
    20 public class AddActivity extends Activity implements View.OnClickListener {
    21     private String ID="";
    22     private android.support.design.widget.TextInputLayout editMessage,editUsername,editPassword;
    23     @Override
    24     protected void onCreate(Bundle savedInstanceState) {
    25         super.onCreate(savedInstanceState);
    26         requestWindowFeature(Window.FEATURE_NO_TITLE);
    27         setContentView(R.layout.activity_add);
    28         Bmob.initialize(AddActivity.this,ID);
    29         editMessage=(android.support.design.widget.TextInputLayout)findViewById(R.id.commit_content);
    30         editUsername=(TextInputLayout)findViewById(R.id.commit_user);
    31         editPassword=(TextInputLayout)findViewById(R.id.commit_psw);
    32         findViewById(R.id.btn_commit).setOnClickListener(this);
    33     }
    34     @Override
    35     public void onClick(View v) {
    36         String content=editMessage.getEditText().getText().toString();
    37         String user=editUsername.getEditText().getText().toString();
    38         String psw=editPassword.getEditText().getText().toString();
    39         if (content.equals("")){
    40             editMessage.setError("内容不能为空");
    41             editMessage.requestFocus();
    42         }else if (user.equals("")){
    43             editUsername.setError("用户名不能为空");
    44             editUsername.requestFocus();
    45         }else if (psw.equals("")){
    46             editPassword.setError("密码不能为空");
    47             editPassword.requestFocus();
    48         }else{
    49             //获取当前用户的用户名,等同于bmob云端上的表名
    50             BmobUser bmobUser=BmobUser.getCurrentUser();
    51             String str=bmobUser.getUsername();
    52             //将数据传入到表格中,然后保存到云端
    53             UserMessage userMessage=new UserMessage(str,user,psw,content);
    54             userMessage.save(new SaveListener<String>() {
    55                 @Override
    56                 public void done(String s, BmobException e) {
    57                     if (e==null){
    58                         Toast.makeText(AddActivity.this,"保存成功",Toast.LENGTH_SHORT).show();
    59                         Intent i=new Intent(AddActivity.this, ListActivity.class);
    60                         startActivity(i);
    61                         finish();
    62                     }else{
    63                         Log.d("tag","保存失败"+e.getMessage());
    64                         Toast.makeText(AddActivity.this,"保存失败:"+e.getMessage(),Toast.LENGTH_SHORT).show();
    65                     }
    66                 }
    67             });
    68         }
    69     }
    70 }
    View Code

    (6)添加完信息后,我们应该将在列表界面中更新出相关数据出来,那么我们去更新数据,即从bmob云端中获取数据,那么这里要去搜索与用户相对应的信息,而这里我们直接去搜索表名为用户名的表格即可,因为我们之前已经设置了表名为用户名,但这里要注意的是,从bmob云端中获取到的数据是json类型数据,所以我们还要对其进行解析。以及长按删除列表项的功能和点击跳转到详情页面。

      1 package base.secret;
      2 
      3 import android.app.Activity;
      4 import android.content.DialogInterface;
      5 import android.content.Intent;
      6 import android.os.Bundle;
      7 import android.support.v7.app.AlertDialog;
      8 import android.util.Log;
      9 import android.view.View;
     10 import android.view.Window;
     11 import android.widget.AdapterView;
     12 import android.widget.ListView;
     13 import android.widget.Toast;
     14 
     15 import org.json.JSONArray;
     16 import org.json.JSONException;
     17 import org.json.JSONObject;
     18 
     19 import java.util.ArrayList;
     20 import java.util.List;
     21 
     22 import cn.bmob.v3.Bmob;
     23 import cn.bmob.v3.BmobQuery;
     24 import cn.bmob.v3.BmobUser;
     25 import cn.bmob.v3.exception.BmobException;
     26 import cn.bmob.v3.listener.FindListener;
     27 import cn.bmob.v3.listener.QueryListener;
     28 import cn.bmob.v3.listener.UpdateListener;
     29 public class ListActivity extends Activity implements View.OnClickListener, AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
     30     private List<UserMessage> listContent=new ArrayList<>();
     31     private ListView listView;
     32     private String ID="";
     33     private UserAdapter adapter;
     34     @Override
     35     protected void onCreate(Bundle savedInstanceState) {
     36         super.onCreate(savedInstanceState);
     37         requestWindowFeature(Window.FEATURE_NO_TITLE);
     38         setContentView(R.layout.activity_list);
     39         Bmob.initialize(ListActivity.this,ID);
     40         listView=(ListView)findViewById(R.id.list);
     41         //绑定适配器
     42         adapter=new UserAdapter(ListActivity.this,R.layout.item,listContent);
     43         //更新数据
     44         getData();
     45         listView.setOnItemClickListener(this);
     46         findViewById(R.id.btn_add).setOnClickListener(this);
     47         listView.setOnItemLongClickListener(this);
     48     }
     49     public void getData() {
     50         //获取到当前用户名
     51         BmobUser user=BmobUser.getCurrentUser();
     52         //搜索bmob中表名与用户名等同的表
     53         BmobQuery query=new BmobQuery(user.getUsername());
     54         query.findObjectsByTable(new QueryListener<JSONArray>() {
     55             @Override
     56             public void done(JSONArray jsonArray, BmobException e) {
     57                 if (e==null){
     58                     for (int i=0;i<jsonArray.length();i++){
     59                         try {
     60                             //先将json数组解析为json对象
     61                             JSONObject jsonObject=jsonArray.getJSONObject(i);
     62                             //然后再分别获取到相关对应的数据
     63                             String userName=jsonObject.getString("user");
     64                             String password=jsonObject.getString("psw");
     65                             String message=jsonObject.getString("message");
     66                             String ObjectId=jsonObject.getString("objectId");
     67                             //将获取的数据保存到表中
     68                             UserMessage userMessage=new UserMessage(userName,password,message);
     69                             userMessage.setObjectId(ObjectId);
     70                             //然后再添加到列表中
     71                             listContent.add(userMessage);
     72                         } catch (JSONException e1) {
     73                             e1.printStackTrace();
     74                         }
     75                     }
     76                     //更新适配器的内容
     77                     listView.setAdapter(adapter);
     78                     adapter.notifyDataSetChanged();
     79                     Toast.makeText(ListActivity.this,"更新成功"+jsonArray.length(),Toast.LENGTH_SHORT).show();
     80                 }else {
     81                     Toast.makeText(ListActivity.this,"更新失败"+e.getMessage(),Toast.LENGTH_SHORT).show();
     82                 }
     83             }
     84         });
     85     }
     86     @Override
     87     public void onClick(View v) {
     88         switch (v.getId()){
     89             case R.id.btn_add:
     90                 Intent i=new Intent(ListActivity.this,AddActivity.class);
     91                 startActivityForResult(i,1);
     92                 finish();
     93                 break;
     94         }
     95     }
     96     @Override
     97     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     98         //获取到当前点击的内容信息
     99         UserMessage userMessage=listContent.get(position);
    100         String Id=userMessage.getObjectId();
    101         //跳转并传递数据到账户详细信息界面
    102         Intent intent=new Intent(ListActivity.this,DetailActivity.class);
    103         intent.putExtra("name",userMessage.getUser());
    104         intent.putExtra("password",userMessage.getPsw());
    105         startActivity(intent);
    106     }
    107 
    108     @Override
    109     public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
    110         //实现长按删除功能
    111         AlertDialog.Builder builder=new AlertDialog.Builder(ListActivity.this);
    112         builder.setMessage("是否要删除该内容?").setNegativeButton("取消", new DialogInterface.OnClickListener() {
    113             @Override
    114             public void onClick(DialogInterface dialog, int which) {
    115 
    116             }
    117         }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
    118             @Override
    119             public void onClick(DialogInterface dialog, int which) {
    120                 //获取到要删除的表
    121                 BmobUser bmobUser=BmobUser.getCurrentUser();
    122                 UserMessage user=new UserMessage();
    123                 user.setTableName(bmobUser.getUsername());
    124                 //删除在云端的信息
    125                 user.delete(listContent.get(position).getObjectId(), new UpdateListener() {
    126                     @Override
    127                     public void done(BmobException e) {
    128                         if (e==null){
    129                             Toast.makeText(ListActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
    130                             //删除列表中的信息,并更新
    131                             listContent.remove(position);
    132                             adapter.notifyDataSetChanged();
    133                         }
    134                         else{
    135                             Toast.makeText(ListActivity.this,"删除失败"+e.getMessage(),Toast.LENGTH_SHORT).show();
    136                             Log.d("Error",e.getMessage()+"");
    137                         }
    138                     }
    139                 });
    140             }
    141         });
    142         builder.show();
    143         return true;
    144     }
    145 
    146 
    147 }
    View Code

    (7)详情页面:DetailActivity——获取到传递过来的信息,并加载到布局中即可。

     1 package base.secret;
     2 import android.app.Activity;
     3 import android.content.Intent;
     4 import android.os.Bundle;
     5 import android.support.design.widget.*;
     6 import android.view.Window;
     7 import android.widget.TextView;
     8 public class DetailActivity extends Activity {
     9     private TextView textName,textPsw;
    10     @Override
    11     protected void onCreate(Bundle savedInstanceState) {
    12         super.onCreate(savedInstanceState);
    13         requestWindowFeature(Window.FEATURE_NO_TITLE);
    14         setContentView(R.layout.activity_detail);
    15         textName=(TextView)findViewById(R.id.text_username);
    16         textPsw=(TextView)findViewById(R.id.text_psw);
    17         Intent intent=getIntent();
    18         textName.setText(intent.getStringExtra("name"));
    19         textPsw.setText(intent.getStringExtra("password"));
    20     }
    21 }
    View Code

    5.总结:这是第一次尝试将数据上传到云端,并从云端中获取数据,在使用bmob云端过程中,有个问题被困扰了很久,就是关于如何实现为每一个用户建立一个对应的表格,将用户的信息保存到对应的表格中,后来通过设置表名唯一,搜索表名来获取表中数据来实现,总的来说,这一次的实现过程中,处处碰壁,主要是对bmob平台的不熟悉导致,希望之后能够加强对bmob平台的熟悉,以及着手学习自己去搭建一个服务器,这样受限就不会那么多,不过这步还有很漫长,希望能坚持下去!

  • 相关阅读:
    POJ 2068 Nim#双人dp博弈
    POJ 1678 I Love this Game!#dp博弈
    HDU 3404&POJ 3533 Nim积(二维&三维)
    POJ 3537 Crosses and Crosses(SG/还未想完全通的一道SG)
    POJ 2311 Cutting Game(SG+记忆化)
    POJ 2484 A Funny Game(找规律)
    POJ 2505 A multiplication game(找规律博弈/贪心)
    POJ 2975 Nim(普通nim)
    POJ 2368 Buttons(巴什博弈变形)
    POJ 1704 Georgia and Bob(阶梯博弈+证明)
  • 原文地址:https://www.cnblogs.com/xy95/p/5990773.html
Copyright © 2011-2022 走看看