【问题标题】:Backendless setWhereClause Data Query returns FATAL EXCEPTION error后端 setWhereClause 数据查询返回 FATAL EXCEPTION 错误
【发布时间】:2017-06-14 19:07:08
【问题描述】:

我正在尝试将 Parse 项目迁移到 Backendless。 因此,我正在按照教程学习 Backendless。 该教程由 Samantha Squires 编写,在 Youtube 上。 我在这里构建的是添加 2 个人为朋友的能力。 我以 testuser 身份登录,我想将一个朋友添加到我的朋友列表中。 这是在 Backendless 中添加 2 个朋友为朋友的方法。 我收到以下错误消息:

E/AndroidRuntime: FATAL EXCEPTION: IntentService[AddFriendService]
                                                                                    java.lang.NoClassDefFoundError: java.util.Objects
                                                                                        at com.backendless.Persistence.find(Persistence.java:638)
                                                                                        at com.backendless.DataStoreFactory$1.find(DataStoreFactory.java:188)
                                                                                        at com.example.muhammadahsan.a27sam01.AddFriendService.addFriends(AddFriendService.java:121)
                                                                                        at com.example.muhammadahsan.a27sam01.AddFriendService.onHandleIntent(AddFriendService.java:90)
                                                                                        at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                        at android.os.Looper.loop(Looper.java:137)
                                                                                        at android.os.HandlerThread.run(HandlerThread.java:61)

我加2个人为好友的方法是:

private void addFriends (String firstUserName, String secondUserName){

        Log.i("addFriendsMethod: ", "addFriendsMethod is Running");

        DataQueryBuilder query = DataQueryBuilder.create();

        query.setWhereClause(String.format("name = '%s' or name = '%s'", firstUserName, secondUserName));

        Backendless.Persistence.of(BackendlessUser.class).find(query, new AsyncCallback<List<BackendlessUser>>() {
            @Override
            public void handleResponse(List<BackendlessUser> response) {

                Log.i("Query Response:" , response.toString());

                List<BackendlessUser> users = response;

                if (users.size() !=2){
                    broadcastAddFriendFailure();
                    //That means we have more that one users or one of users wasn't found

                } else {
                    BackendlessUser user1 = users.get(0);//First user
                    final BackendlessUser user2 = users.get(1);//Second user

                    //Update first user, adding second user as a friend.
                    updateFriendsList(user1,user2);
                    Backendless.UserService.update(user1, new AsyncCallback<BackendlessUser>() {
                        @Override
                        public void handleResponse(BackendlessUser user) {
                            //Now Update second user adding first user as a friend
                            updateFriendsList(user2, user);//user is the updated version of user1
                            Backendless.UserService.update(user2, new AsyncCallback<BackendlessUser>() {
                                @Override
                                public void handleResponse(BackendlessUser response) {
                                    broadcastAddFriendSuccess();
                                }

                                @Override
                                public void handleFault(BackendlessFault fault) {
                                    broadcastAddFriendFailure();
                                }
                            });
                        }

                        @Override
                        public void handleFault(BackendlessFault fault) {
                            broadcastAddFriendFailure();
                        }
                    });
                }

            }

            @Override
            public void handleFault(BackendlessFault fault) {

            }
        });

    }

我知道有问题

Backendless.Persistence.of(BackendlessUser.class).find(query, new AsyncCallback<List<BackendlessUser>>()

因为我尝试在日志中测试 whereclause 的输出。 任何帮助将不胜感激。

【问题讨论】:

    标签: android fatal-error backendless


    【解决方案1】:

    看来,要使用 Backendless SDK,您必须将 Android SDK 19+ 指定为最低版本。原因是 Objects 类的静态方法(显然是 Backendless SDK 使用的)are only available from this version

    【讨论】:

    • 你好斯卡奇!再次感谢您的快速回答。还有一个快速的问题。为什么我无法获得 response.getData(),因为我正在关注 Samantha squires 的教程,它有效。但对我来说,响应只给了我 .get(int)。是因为 Backendless 3 和 Backendless 4 的不同吗?请注意,响应是我通过 query.setWhereClause 后得到的。
    • @JohnyHawkAhsan 确切地说,这就是 Backendless 3 和 4 之间的区别:现在 find() 方法返回原生 java 列表,而之前它返回一个 BackendlessCollection 包装器。实际上,这是一种简化,因为现在您只需要少调用一个方法。
    • 非常感谢@Scadge!
    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多