Dreamfactory: запрос записей с несколькими фильтрами

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

Использование AsyncTask с именем GetProductsBySubCatIdTask

 public class GetProductsBySubCatIdTask extends BaseAsyncRequest {

 Context context;
 public Products productsRec;
 int subCatId;
 String sort_str,fltr_str;

 public GetProductsBySubCatIdTask(Context context, int subCataId, String   sort_str, String fltr_str){
     this.context    =   context;
     this.subCatId   =   subCataId;
     this.sort_str   =   sort_str;
     this.fltr_str   =   fltr_str;
 }

 @Override
 protected void doSetup() throws ApiException, JSONException {
     callerName = "getProductsBySubCatId";

     serviceName = AppConstants.DB_SVC;
     endPoint = "product";
     verb = "GET";

     // filter to only select the contacts in this group

     if(!TextUtils.isEmpty(fltr_str)){
          fltr_str =  "&&"  + fltr_str;
      }
      else{
          fltr_str = "";
      }

      queryParams = new HashMap<>();
      queryParams.put("filter", "sub_category_id=" + subCatId + fltr_str);
      queryParams.put("order", sort_str);


      applicationApiKey = AppConstants.API_KEY;
      sessionToken = PrefUtil.getString(context, AppConstants.SESSION_TOKEN);

  }

   @Override
   protected void processResponse(String response) throws ApiException, JSONException {
     //Log.d("Tang Ho"," >>>>> " + response);
     productsRec =
             (Products) ApiInvoker.deserialize(response, "", Products.class);
   }

  @Override
  protected void onCompletion(boolean success) {
     if(success && productsRec != null && productsRec.products.size() > 0){
         Log.d("Tang Ho"," >>>>> Success");
     }
  }
}

Я использовал фильтры, которые создаются вне класса и предоставляются в качестве параметра, возможные фильтры

unit_offerprice < unit_mrp<br>
unit_offerprice = unit_mrp<br>
(unit_offerprice > 200) && (unit_offerprice > 500)<br>
unit_offerprice > 100<br>
unit_offerprice < 600<br>

Все вышеперечисленные фильтры можно использовать как по отдельности, так и в комбинации 2 или 3 типа

unit_offerprice < unit_mrp && unit_offerprice > 100

После экранирования символов в строке, как

unit_offerprice%3Cunit_mrp

Не удалось получить желаемый результат, Искал в документации, но не нашел точную вещь.

что может быть возможным решением для этого?

2 ответа

Решение

Если ваш фильтр имеет несколько условий, каждое условие должно быть заключено в скобки (). Кроме того, правильный синтаксис для объединения фильтров с и - это AND, а не &&. Поддерживаются логические операторы AND, OR и NOT.

В вашем примере это:

unit_offerprice < unit_mrp && unit_offerprice > 100

должно быть так:

(unit_offerprice < unit_mrp) AND (unit_offerprice > 100)

Посмотрите эти части документации: http://wiki.dreamfactory.com/DreamFactory/Features/Database/Records http://wiki.dreamfactory.com/DreamFactory/Tutorials/Querying_records_with_logical_filters

DreamFactory также предлагает ряд официальных способов поддержки, включая форумы пользователей. http://www.dreamfactory.com/support

Получил решение, добавив скобки для нескольких фильтров.

Но была проблема с использованием специальных символов (например, <,>), и это нужно было

закодированный в%3C (для <) и% 3E (для>), строка, используемая для фильтрации:

"(Unit_offerprice>100) и (unit_offerprice<500)"

закодированная форма:

"(Unit_offerprice%3E100) И (unit_offerprice%3C500)"

Другие вопросы по тегам