Bmob中BmobQuery查询数据后将值传递给全局变量

Bmob中BmobQuery查询数据后将值传递给全局变量

刚开始接触Bmob时,通过BmobQuery查询的数据无法赋值给全局变量,通过网上查资料得知Bmob的查询操作是异步线程,异步线程中的值无法直接赋给全局变量!有些大佬通过Handler+message的方法可以实现,我借鉴了一下,但是没成功,也找不到BUG。后来了解到可以使用接口回调,于是一番搜索后,终于得以实现。这里记录一下
这里我主要是想获取数据库中已存用户的ObjectID,将ObjectID传到MainActivity中方便使用。

###1>这里我建了一个用户工具类PersonUtil

/**
 * 用户工具类,用于实现用户的增删查改
 */

public class PersonUtil {

     static String TAG  = "PersonUtil";

    /**
     * 通过用户账户查询用户ID
     */
    public static void  queryObjiectID(String mPhoneNumber){
        String sql = "select * from Person where phoneNumber = ?";//查询用户ID
        new BmobQuery<Person>().doSQLQuery(sql, new SQLQueryListener<Person>() {
            @Override
            public void done(BmobQueryResult<Person> bmobQueryResult, BmobException e) {
                if(e == null){
                    List<Person> list = bmobQueryResult.getResults();
                    person1.getPersonList(list); //将查询得到的list传入
                }else {
                    Log.i(TAG, "done: 查询ID错误"+e.getMessage());
                }
            }
        }, mPhoneNumber);
    }

    private static IPerson person1;
    /**
    * setIUserListener()方法,想在那里获取查询得到的list就在那里调用
    */
    public static void setIPersonListener(IPerson person2){
        person1= person2;
    }
    /**
    * 定义接口
    */
    public interface IPerson{
        void getPersonList(List<Person> list);
    }

}

###2>这里是MainActivity,我希望通过工具类PersonUtil查询用户ObjectID,并将ObjectID赋值给MainActivity的全局变量。


public class MainActivity extends AppCompatActivity{

    static String TAG  = "MainActivity";
    String phoneNumber = "12344556";
    String ID = ""; //接收查询到的ObjectID

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

        //初始化Bmob
        Bmob.initialize(MainActivity.this, "Application_KEY");

       //查询用户ID
        PersonUtil.queryObjiectID(phoneNumber); 
        //调用setIUserListener
        PersonUtil.setIPersonListener(new PersonUtil.IPerson(){
            @Override
            public void getPersonList(List<Person> list) {
                if(list.size() == 0){
                   //没有查找到该用户ID
                   Log.i(TAG, "getUser:该用户未注册");
                }else{
                	ID = list.get(0).getObjectId();
               		Log.i(TAG, "getUser:该用户ObjectID为:"+ID);
               		//Toast.makeText(getApplicationContext(), ID, Toast.LENGTH_SHORT).show();
                }
            }
        });
  }

###这样就可以实现将BmobQuery查询得到的数据赋值给全局变量。

注:也不是我自己想到的,是从这里看到的方法,感谢

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值