2015-08-11 5 views
2

Итак, я реализую приложение с использованием Parse.com в качестве задней части. В Parse есть в основном 3 класса. Первый один Пользователь, где у меня есть информация о пользователе, и Галерея, где у меня есть изображения «, как Instagram, и, наконец Follow Класс, где я имею отношение следующие и последователей.Relational Query Parse.com android

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

так что это код, отображающий все изображений в базе данных не только для людей, которых я слежу.

public class FollowingImages extends ParseQueryAdapter<ParseObject> { 



public FollowingImages (Context context) { 

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() { 
     public ParseQuery create() { 

      ParseQuery<ParseObject> query = ParseQuery.getQuery("Gallery"); 
      query.include("createdBy"); 
      return query; 

     } 
    }); 
} 

// Customize the layout by overriding getItemView 
@Override 
public View getItemView(final ParseObject object, View v, ViewGroup parent) { 

    if (v == null) { 
     v = View.inflate(getContext(), R.layout.list_item, null); 
    } 

    super.getItemView(object, v, parent); 

    // retrieving the Images from Parse.com 

    return v; 
} 

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

пожалуйста, любая помощь будет высоко оценена.

ответ

1

Вы хотите применить ограничения к вашему запросу.

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

query.whereEqualTo("createdBy", "theUserId"); 
query.findInBackground(new GetCallback<ParseObject>() { 
    public void done(ParseObject object, ParseException e) { 
    if (object == null) { 
     Log.d("score", "The find request failed."); 
    } else { 
     Log.d("score", "Retrieved the object."); 
    } 
    } 
}); 

Для получения более подробной информации обратитесь к официальному номеру guide.

+0

это не только один userId, я хочу видеть изображения со всех пользователей, которых я следую – Rawan

+0

, вы можете комбинировать несколько условий с помощью функции or(): https://parse.com/docs/android/api/com/ синтаксический анализ/ParseQuery.html # или% 28java.util.Список% 29 –

+0

, пожалуйста, уточните, используя мой код :(Я не понимаю, что ..... – Rawan

1

Вы можете использовать метод ограничения matchKeyInQuery.

Метод matchKeyInQuery можно использовать для получения объектов, где ключ соответствует значению ключа в наборе объектов, являющихся результатом другого запроса.

(после parse docs)

Так что в вашем случае (я пишу это вручную) это может быть что-то вроде:

ParseQuery<Follow> whoDoIFollow = ParseQuery.getQuery("Follow") 
              .select("From") 
              .whereEqualTo("To", <user>); 

ParseQuery<Gallery> theirImages = ParseQuery.getQuery("Gallery") 
              .whereMatchesKeyInQuery("createdBy", "From", whoDoIFollow); 

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


Просто замените

public FollowingImages (Context context) { 

    super(context, new ParseQueryAdapter.QueryFactory<ParseObject>() { 
     public ParseQuery create() { 
      ParseQuery<ParseObject> whoDoIFollow = ParseQuery.getQuery("Follow") 
                 .select("From") 
                 .whereEqualTo("To", <user>); 

      ParseQuery<ParseObject> theirImages = ParseQuery.getQuery("Gallery") 
                 .whereMatchesKeyInQuery("createdBy", "From", whoDoIFollow); 

      return theirImages; 
     } 
    }); 
} 
+0

Почему было проголосовано? – MatBos

+0

Вы связались с документами JavaScript и ограничили запрос значениями, которые не существуют для класса User, но для класса Follow. –

+1

Имейте в виду, что предел по умолчанию составляет 100 объектов, что может привести к появлению странных результатов ... – Wain

Смежные вопросы