2017-06-14 3 views
0

J'essaie de migrer un projet Parse vers Backendless. Par conséquent, je suis un tutoriel pour apprendre Backendless. Le tutoriel est de Samantha Squires, et c'est sur Youtube. Ce que je construis ici, c'est la possibilité d'ajouter 2 personnes en tant qu'ami. Je suis connecté en tant que testuser et je souhaite ajouter un ami à ma liste d'amis. Voici la méthode pour ajouter 2 amis en tant qu'ami dans Backendless. Je reçois le message d'erreur suivant:Backendless setWhereClause Data Query renvoie FATAL EXCEPTION erreur

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) 

Ma méthode pour ajouter 2 personnes comme ami est:

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

      } 
     }); 

    } 

Je sais qu'il ya quelque chose de mal avec le

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

Parce que j'essayé pour tester la sortie de whereclause dans les journaux. Toute aide sera appréciée.

Répondre

0

Il semble que pour utiliser Backendless SDK, vous devez spécifier Android SDK 19+ comme minimal. La raison en est que les méthodes statiques de la classe Objects (qui apparemment Backendless SDK utilise) are only available from this version.

+0

Bonjour Scadge! Merci beaucoup pour la réponse rapide une fois de plus. Encore une question rapide. Pourquoi je ne suis pas en mesure d'obtenir response.getData(), comme le tutoriel que je suis de Samantha, cela fonctionne. Mais pour moi, la réponse ne me donne que .get (int). Est-ce dû aux différences entre Backendless 3 et Backendless 4? S'il vous plaît noter que la réponse est ce que je reçois après avoir passé la query.setWhereClause. – JohnyHawkAhsan

+0

@JohnyHawkAhsan exactement, c'est la différence entre Backendless 3 et 4: maintenant la méthode 'find()' retourne la liste java nativate, alors que précédemment elle renvoyait un wrapper 'BackendlessCollection'. C'est une simplification, en fait, puisque maintenant vous avez juste besoin d'un appel de méthode moins. – Scadge

+0

Merci beaucoup @Scadge! – JohnyHawkAhsan