2015-07-27 2 views
1

Я использую http://quickblox.com/developers/SimpleSample-customObjects-android#Search_operators, чтобы найти ключевые слова в типе данных «Array».Как искать в массивах Quickblox

Но он ищет только первую строку в массиве. Как искать среди всех строк в массиве?

public static void getNews(final Context context, final Handler handler, final int page) { 
    ArrayList<String> catSearch = new ArrayList<>(); 
    ArrayList<NewsCategory> categories = Cache.getNewsCategories(context); 
    for(NewsCategory category : categories) { 
     if(Cache.isCategoryChecked(context, category.getId())) { 
      catSearch.add(category.getId()); 
     } 
    } 

    ArrayList<String> tagSearch = new ArrayList<>(); 
    ArrayList<NewsTag> tags = Cache.getNewsTags(context, Cache.SELECTED_TAGS); 
    for(NewsTag tag : tags) { 
     tagSearch.add(tag.getTitle()); 
    } 

    QBRequestGetBuilder builder = new QBRequestGetBuilder(); 
    if(tagSearch.size() == 0) { 
     builder.ctn("LangId", Cache.getNewsLanguage(context)). 
       in("CategoryId", catSearch.toArray()); 
    } else { 
     builder.ctn("LangId", Cache.getNewsLanguage(context)).in("Tags", tagSearch.toArray()). 
       in("CategoryId", catSearch.toArray()); 
    } 

    QBCustomObjects.getObjects("News", builder, 
      new QBEntityCallbackImpl<ArrayList<QBCustomObject>>() { 
       @Override 
       public void onSuccess(ArrayList<QBCustomObject> customObjects, Bundle params) { 
        ArrayList<String> images = new ArrayList<>(); 
        ArrayList<News> newsArray = new ArrayList<>(); 
        for (QBCustomObject object : customObjects) { 
         try { 
          HashMap<String, Object> pairs = object.getFields(); 
          String id = object.getCustomObjectId(); 
          long created = object.getCreatedAt().getTime(); 
          News news = new News(pairs, id, created); 
          newsArray.add(news); 
          Log.e("", "Tags: " + pairs.get("Tags")); 

          if (!news.getPhoto().equals("")) { 
           images.add(news.getPhoto()); 
          } 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 

        Cache.saveNews(context, newsArray); 

        if (handler != null) { 
         handler.sendEmptyMessage(6); 
        } 
       } 

       @Override 
       public void onError(List<String> errors) { 
        Helper.showErrorToast(context, errors); 
        if (handler != null) { 
         handler.sendEmptyMessage(1); 
        } 
       } 
      }); 
} 

UPD:

Мы провели некоторые исследования, и вот результаты:

1. Когда мы ищем тег "Русский":

QBRequestGetBuilder builder = new QBRequestGetBuilder(); 
builder.in("Tags", "Русский"); 

https://api.quickblox.com/data/News.json?Tags[in]=%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9

РЕЗУЛЬТАТЫ:

news id: 55b4a74f535c12b641004f3e; теги: [Русский, советы]

news id: 55b91b78535c129a1d0039f2; теги: [Русский, Россия]

news id: 55ba9482535c1238ce003522; теги: [Русский, Россия]

news id: 55ba96c4535c1298ec0003fc; теги: [Русский, советы]

news id: 55ba973f535c1298ec0004d7; теги: [Русский]

news id: 55ba9967535c12e2c00017f9; теги: [Русский, Россия]

news id: 55ba99e3535c1298ec00099f; теги: [Русский, Россия]

news id: 55bd592c535c12a8d6000327; теги: [Русский]

news id: 55bb32ae535c12e543006e15; теги: [Русский, религия, пятница, Коран]

Итак, он не искал тег «Русский», если он не является первым тегом в массиве. Мы проверили Databse - у нас есть некоторые новости с тегами [ "Россия", "Русский"]

2. Когда мы ищем по тегам "Русский", "Томск":

QBRequestGetBuilder builder = new QBRequestGetBuilder(); 
     builder.in("Tags", "Русский", "Томск"); 

https://api.quickblox.com/data/News.json?Tags[in]=%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%2C%D0%A2%D0%BE%D0%BC%D1%81%D0%BA

3.When we search for tags "Томск", "Русский":

QBRequestGetBuilder builder = new QBRequestGetBuilder(); 
     builder.in("Tags", "Томск", "Русский"); 

https://api.quickblox.com/data/News.json?Tags[in]=%D0%A2%D0%BE%D0%BC%D1%81%D0%BA%2C%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9

RESULTS FOR 2 AND 3 THE SAME NOW:

news id: 555c46736390d8a0ca03ab61; tags: [Томск, Алмере]

news id: 555c46b26390d8a7ce01439e; tags: [Томск, Алмере, Нидерланды, Россия]

news id: 555c50bf6390d8b66300dadf; tags: [Россия, Томская область, Томск]

news id: 555d7f5c6390d8eb8504df15; tags: [Россия, Томская область, Томск, Russia, Moscow, Москва]

news id: 556454536390d894de005c22; tags: [Томск, Россия]

news id: 55a905ba535c1207e600251d; tags: [Томск, Россия]

news id: 55b4a74f535c12b641004f3e; tags: [Русский, советы]

news id: 55b91b78535c129a1d0039f2; tags: [Русский, Россия]

news id: 55ba9482535c1238ce003522; tags: [Русский, Россия]

news id: 55ba96c4535c1298ec0003fc; tags: [Русский, советы]

news id: 55ba973f535c1298ec0004d7; tags: [Русский]

news id: 55ba9967535c12e2c00017f9; tags: [Русский, Россия]

news id: 55ba99e3535c1298ec00099f; tags: [Русский, Россия]

news id: 55bd592c535c12a8d6000327; tags: [Русский]

news id: 55bb32ae535c12e543006e15; tags: [Русский, религия, пятница, Коран]

news id: 55666ac66390d8ce7900044f; tags: [Томск, Россия]

+1

Хорошо, можете ли вы опубликовать журналы REST из логарифма? потому что похоже, что REST API работает нормально, нужно проверить, что генерирует Android SDK –

+0

Igor, у меня есть обновление моего сообщения –

ответ

0

According to that doc http://quickblox.com/developers/SimpleSample-customObjects-android#Search_operators

with arrays you can use only in , nin and all operators

UPD For example, I have a class Post with a field tags .И есть запись, где теги = [ "человек", "гольф", "автомобиль"]

Это мои запросы:

http://api.quickblox.com/data/Post.json?tags[in]=car&token=70f997fecf68b25f8992271b5f943503884f3f52 

http://api.quickblox.com/data/Post.json?tags[in]=man&token=70f997fecf68b25f8992271b5f943503884f3f52 

http://api.quickblox.com/data/Post.json?tags[in]=golf&token=70f997fecf68b25f8992271b5f943503884f3f52 

все они возвращают ту же запись:

{"class_name":"Post","skip":0,"limit":0, 
    "items":[{"_id":"55ba0597535c12a4120011e8","_parent_id":"", 
    "body":"How are you?", 
    "created_at":1438254487,"tags":["man","golf","car"], 
    "title":"best post","updated_at":1438254487,"user_id":291}]} 
+0

Да, мы пробовали все из них, но они ищут только первую строку в массивах. –

+0

Добавлен пример, пожалуйста, проверьте –

+0

Игорь, спасибо. У меня есть обновленный вопрос, можете ли вы проверить, пожалуйста. –

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