【问题标题】:Windows Azure query not executing in android appWindows Azure 查询未在 Android 应用程序中执行
【发布时间】:2014-05-13 14:15:40
【问题描述】:

我有一个 android 应用程序,它有两个相邻的查询,它们都填充私有变量。我在模拟器上运行它并且由于空指针异常而崩溃。在调试它并跟踪程序之后,它会转到下面的代码并完全跳过它并转到 imgFavorite 行。关于为什么会发生这种情况的任何建议?

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.test_activity);
            try {
                mClient = new MobileServiceClient(
                          "https://classconnect.azure-mobile.net/",
                          "HzaUWkJBnWTXxCuREwxyQSaxJSyyJm51",
                          this
                    );
                // TODO: 3 Get the Mobile Service Table instance to use
                mUserTable = mClient.getTable(User.class);
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                mEmail = getIntent().getStringExtra("Email");

            mUserTable.where().field("email").eq(mEmail).execute(new TableQueryCallback<User>() {
                @Override
                public void onCompleted(List<User> result, int arg1,
                        Exception arg2, ServiceFilterResponse arg3) {
                    // TODO Auto-generated method stub
                    if (arg2 == null){
                        if(!result.isEmpty()){
                            currentUser = result.get(0);
                            System.out.println(currentUser.getfName());
                    } else{
                        System.out.println("Error");
                    }
                    }
                }
            });

            mUserTable.select("email").execute(new TableQueryCallback<User>(){

                @Override
                public void onCompleted(List<User> result, int arg1,
                        Exception arg2, ServiceFilterResponse arg3) {
                    // TODO Auto-generated method stub
                    if(arg2 == null){
                        for(User i : result){
                            allUsers.add(i.getEmail());
                        }
                    } else{
                        System.out.println("Error");
                    }
                }

            });


            imgFavorite = (ImageView) findViewById(R.id.imageView1);

【问题讨论】:

    标签: java android database azure


    【解决方案1】:

    当您调用移动服务(例如 mUserTable.select 或 mUserTable.where 调用)时,您作为参数传入的回调就是回调。请求是异步发出的,回调代码仅在您的移动服务响应时执行。如果您在这些回调中放置断点,您会看到它们在收到响应后执行。这就是为什么看起来执行正在跳过该代码并直接进入 imgFavorite 行的原因。至于为什么会出现空异常,您必须单步执行代码并查看实际触发它的代码行。

    【讨论】:

    • 我应该更具体一点。当我尝试操作我试图从数据库中获取的“currentUser”时,我得到一个空指针。我在 oncreateview 片段方法中访问它。我应该让这个方法执行等待还是等待天蓝色的响应?
    • 我会考虑显示一个活动指示器,以便用户知道正在发生某些事情,然后在您知道收到它后在回调代码中对当前用户进行操作。
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多