如何在android中使用改造@Query注解进行过滤
Posted
技术标签:
【中文标题】如何在android中使用改造@Query注解进行过滤【英文标题】:How can I use the retrofit @Query annotation for filtration in android 【发布时间】:2022-01-04 12:43:45 【问题描述】:我在下面有一个 php 文件
<?php
require dirname(__FILE__).'/../DbConnection/conn.php';
if($conn)
$sqlStr = "SELECT
YEAR(OrderBill.BillingDate) AS year,
SUM(MultiPay.Amount) AS growth_rate
FROM Rst_TblMultiPayModes MultiPay
LEFT OUTER JOIN Rst_TblOrderBills OrderBill
ON MultiPay.OrderBillCode = OrderBill.OrderBillCode
WHERE OrderBill.isBillCleared=1 AND OrderBill.isMerged=0
AND MultiPay.PaymentMode IN(1,2,3,4,6,7)
$_GET['mselectperiod']
GROUP BY
YEAR(OrderBill.BillingDate)";
$sqlResult = mysqli_query($conn,$sqlStr);
$response = array();
while($row = mysqli_fetch_assoc($sqlResult))
array_push($response,$row);
echo json_encode($response);
mysqli_close($conn);
else
echo "Host Connection Error";
?>
当我在浏览器中执行此 PHP 文件时,它可以正常工作,如下所示 Execution Result Of salegrowthratechartyear.php
现在谈到android,我通过创建一个接口来使用Retrofit库,如下所示
public interface ApiInterface
@GET("PHP_QRY_FILE_NAME")
Call<List<Growth>> getGrowthInfo(@Path(value="PHP_QRY_FILE_NAME",encoded = true) String mPhpQryFileName);
那我调用如下
call = ChartApiClient.getApiClient().create(ApiInterface.class).getGrowthInfo("salesgrowthratechartyear.php);
上述方法也可以正常工作,但仅当我在 PHP 文件中删除 $_GET['mselectperiod'] 时。 当我想在我的界面中的那个 PHP 文件中使用 $_GET['mselectperiod'] 时,问题就来了,如下所示
public interface ApiInterface
@GET("PHP_QRY_FILE_NAME")
Call<List<Growth>> getGrowthInfo(@Path(value="PHP_QRY_FILE_NAME",encoded = true) String mPhpQryFileName, @Query("mselectperiod") String mWhereClause);
那我调用如下
call = ChartApiClient.getApiClient().create(ApiInterface.class).getGrowthInfo("salesgrowthratechartyear.php",SalesGrowthChart.mFinalSelectPeriodQry);
请注意,“SalesGrowthChart.mFinalSelectPeriodQry”是一个变量,它接收如下变化的字符串值
"AND YEAR(BillingDate)>=2019 AND YEAR(BillingDate)
什么都没有发生。我错过了什么?
【问题讨论】:
【参考方案1】:修改界面
public interface ApiInterface
@GET("PHP_QRY_FILE_NAME")
Call<List<Growth>> getGrowthInfo(@Path(value="PHP_QRY_FILE_NAME",encoded = true) String mPhpQryFileName, @Query(value="mselectperiod",encoded = true) String mWhereClause);
我省略了 'Value=' 并且它应该被 编码为 true(,encoded = true)
然后在我的 PHP 文件中,我为 $_GET
进行了如下编辑<?php
require dirname(__FILE__).'/../DbConnection/conn.php';
$mselectperiod = $_GET["mselectperiod"];
if($conn)
$sqlStr = "SELECT
YEAR(OrderBill.BillingDate) AS year,
SUM(MultiPay.Amount) AS growth_rate
FROM Rst_TblMultiPayModes MultiPay
LEFT OUTER JOIN Rst_TblOrderBills OrderBill
ON MultiPay.OrderBillCode = OrderBill.OrderBillCode
WHERE OrderBill.isBillCleared=1 AND OrderBill.isMerged=0
AND MultiPay.PaymentMode IN(1,2,3,4,6,7)
$mselectperiod
GROUP BY
YEAR(OrderBill.BillingDate)";
$sqlResult = mysqli_query($conn,$sqlStr);
$response = array();
while($row = mysqli_fetch_assoc($sqlResult))
array_push($response,$row);
echo json_encode($response);
mysqli_close($conn);
else
echo "Host Connection Error";
?>
而且效果很好。 . .
【讨论】:
以上是关于如何在android中使用改造@Query注解进行过滤的主要内容,如果未能解决你的问题,请参考以下文章
kotlin android中的改造请求@Part和@Query
如何在使用改造和 android jetpack 库时使用此动态 json 键创建数据类
【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...
如何在 Kotlin android 的改造中使用 enque 方法