0

我正在开发一个电子商务 android 应用程序。我正在尝试基于多个过滤器使用适用于 android 的 dreamfactory API 获取记录。

使用名为 GetProductsBySubCatIdTask 的 AsyncTask

 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

无法获得所需的结果,在文档中搜索但没有找到确切的内容。

什么是可能的解决方案?

4

2 回答 2

1

如果您的过滤器有多个条件,则每个条件都需要放在括号 () 内。此外,使用 and 连接过滤器的正确语法是 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#Filtering_Records http://wiki.dreamfactory.com/DreamFactory/Tutorials/Querying_records_with_logical_filters

DreamFactory 还提供了许多官方支持途径,包括用户论坛。http://www.dreamfactory.com/support

于 2016-08-01T14:30:48.910 回答
0

通过为多个过滤器添加括号来解决它。

但是使用特殊字符(如 <、>)存在问题,这需要

编码为 %3C (for <) 和 %3E (for >),用于过滤的字符串是:

“(unit_offerprice>100)AND(unit_offerprice<500)”

编码形式为:

“(unit_offerprice%3E100)AND(unit_offerprice%3C500)”

于 2016-08-02T10:33:55.733 回答