2017-06-14 61 views
0

我在尝试将Parse项目迁移到Backendless。 因此,我正在按照教程学习Backendless。 本教程由Samantha Squires提供,位于Youtube上。 我在这里建立的是能够添加2人作为朋友。 我以testuser身份登录,我想将朋友添加到我的朋友列表中。 以下是在Backendless中添加2个朋友成为朋友的方法。 我收到以下错误信息:Backendless setWhereClause Data Query返回FATAL EXCEPTION错误

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>>() 

因为我试过测试日志中的where条款的输出。 任何帮助将不胜感激。

回答

0

看来,为了使用Backendless SDK,你必须指定Android SDK 19+为最小。原因在于Objects类的静态方法(显然是Backendless SDK使用的)are only available from this version

+0

Hello Scadge! 再次感谢您的快速回答。 另一个快速问题。 为什么我无法获得response.getData(),正如我遵循Samantha squires的教程,它的工作原理。 但对我来说,回应只会给我.get(int)。 是因为Backendless 3和Backendless 4的区别吗? 请注意,响应是我通过query.setWhereClause后得到的。 – JohnyHawkAhsan

+0

@JohnyHawkAhsan确切地说,这就是Backendless 3和4之间的区别:现在'find()'方法返回nativate java List,而早些时候它返回一个'BackendlessCollection'包装。这实际上是一种简化,因为现在你只需要一个方法调用较少。 – Scadge

+0

谢谢sooo @Scadge! – JohnyHawkAhsan