2015-05-08 2 views
0

У меня есть приложение для Android, в котором хранятся имена компаний и те, которые связаны с компаниями, используя Parse.Parse/Android. Получение пользователя, связанного с объектом

Я могу получить столбец, созданный вызываемым владельцем, который хранит идентификатор пользователя.

Теперь я хочу сохранить информацию в столбце компании, где идентификатор пользователя в пользователе равен текущему пользователю. Вот запрос, который я использую:

 ParseQuery<ParseObject> query = ParseQuery.getQuery("midwifefirm"); 

     query.findInBackground(new FindCallback<ParseObject>() { 

      @Override 
      public void done(List<ParseObject> midwives, ParseException e) { 
       // TODO Auto-generated method stub 
       if(e==null) { 

        for (ParseObject midwifefirm : midwives) { 
         String midwiferelation; 
         ParseUser currentUser; 
         String userID; 


         midwiferelation = midwifefirm.getString("ownedby"); 
         currentUser = ParseUser.getCurrentUser(); 
         userID = currentUser.getObjectId(); 

         if (midwiferelation.equals(userID)) { 

          midwifefirm.put("yearsinpractice", yearsexperience); 
          midwifefirm.put("practicename", midwifefirmname); 
          midwifefirm.put("education", education); 



         } 

        } 

       } 
      else{ 
       Log.d("notretreive", "Error: " + e.getMessage()); 

       } 




           } 
           }); 

Это, казалось бы, сработало; но в бэкэнд не хранится никаких данных, поэтому я думаю, что мой оператор if if никогда не работает.

Есть ли что-то очевидное, я делаю неправильно? Это для проекта диссертации, поэтому я могу попытаться подделать вещи немного для демонстрации, но хотел бы узнать, как это сделать правильно.

спасибо

Майкл

+0

Я думаю, что, возможно, заметили проблему .. 'ownedby' является указателем, не так ли? – cYrixmorten

+0

@cYrixmorten да это –

ответ

0

Не уверен, что я получил код ниже совершенно прав. Но проблема, которую вы имеете, заключается в том, что ownedBy является (как я понимаю) указателем на пользователя.

Когда вы пытаетесь сделать midwifefirm.getString("ownedby"), вы не получаете объектId, как вы ожидаете, вместо этого вы получаете что-то вроде {'type':'__pointer', 'class' : '_User', 'objectId' : 'xxx'} (я не помню нотацию, но надеюсь, что вы получите эту идею, буквальное значение строки указателя).

Зная это, не странно, что objectId xxx String никогда не может сравниться midwifefirm.getString("ownedby").

Вместо getString, вы можете вызвать getParseUser, который возвращает пустой ParseUser с правильным ObjectId, напомним, что указатель имеет только минимальную информацию, необходимую для получения объекта он указывает.

Теперь вы можете сделать прямое сравнение между вашим текущим ParseUser и указателем ParserUser. Тот факт, что последний пуст, не имеет значения, поскольку ему требуется только объект, чтобы выполнить сравнение.

Попробуйте это:

 ParseQuery<ParseObject> query = ParseQuery.getQuery("midwifefirm"); 

     query.findInBackground(new FindCallback<ParseObject>() { 

      @Override 
      public void done(List<ParseObject> midwives, ParseException e) { 
       // TODO Auto-generated method stub 
       if(e==null) { 

        for (ParseObject midwifefirm : midwives) { 
         ParseUser midwiferelation; 
         ParseUser currentUser; 



         midwiferelation = midwifefirm.getParseUser("ownedby"); 
         currentUser = ParseUser.getCurrentUser(); 


         if (midwiferelation.equals(currentUser)) { 

          midwifefirm.put("yearsinpractice", yearsexperience); 
          midwifefirm.put("practicename", midwifefirmname); 
          midwifefirm.put("education", education); 



         } 

        } 

       } 
      else{ 
       Log.d("notretreive", "Error: " + e.getMessage()); 

       } 




           } 
           }); 
Смежные вопросы