手动重试Android上的Volley请求

时间:2015-12-21 19:45:00

标签: android android-volley

我知道要使用 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <UPSSecurity xmlns="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0"> <UsernameToken> <Username>xxxxxxxxx</Username> <Password>xxxxxxxxx</Password> </UsernameToken> <ServiceAccessToken> <AccessLicenseNumber>xxxxxxxxx</AccessLicenseNumber> </ServiceAccessToken> </UPSSecurity> </soap:Header> <soap:Body> <RateRequest xmlns="http://www.ups.com/XMLSchema/XOLTWS/Rate/v1.1"> <Request xmlns="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0"> <RequestOption>rate</RequestOption> </Request> <CustomerClassification> <Code>00</Code> </CustomerClassification> <Shipment> <Shipper> <ShipperNumber>xxxxxx</ShipperNumber> <Address> <StateProvinceCode>WA</StateProvinceCode> <PostalCode>98134</PostalCode> <CountryCode>US</CountryCode> </Address> </Shipper> <ShipTo> <Address> <StateProvinceCode>CA</StateProvinceCode> <PostalCode>90210</PostalCode> <CountryCode>US</CountryCode> </Address> </ShipTo> <ShipFrom> <Address> <StateProvinceCode>WA</StateProvinceCode> <PostalCode>98134</PostalCode> <CountryCode>US</CountryCode> </Address> </ShipFrom> <Package> <PackagingType><Code>00</Code></PackagingType> <Dimensions> <UnitOfMeasurement><Code>IN</Code></UnitOfMeasurement> <Length>5</Length> <Width>5</Width> <Height>5</Height> </Dimensions> <PackageWeight> <UnitOfMeasurement> <Code>lbs</Code> <Description>Pounds</Description> </UnitOfMeasurement> <Weight>5</Weight> </PackageWeight> </Package> <ShipmentRatingOptions> <NegotiatedRatesIndicator>1</NegotiatedRatesIndicator> </ShipmentRatingOptions> <ShipmentServiceOptions> <SaturdayDeliveryIndicator>1</SaturdayDeliveryIndicator> </ShipmentServiceOptions> <Service> <Code>14</Code><!-- code for the UPS Service associated with the shipment. see pg 47 of Rating XML pdf --> </Service> </Shipment> </RateRequest> </soap:Body> </soap:Envelope> ,但看起来它会自动执行重试。

我想要的是在用户点击重试按钮时触发重试。我试图存储请求并重用它,但发现Volley实际上在请求完成后会破坏侦听器。

这使我无法在重试后进行任何用户交互。然而,我可以再次重建相同的请求,但它看起来并不正确并且使事情变得更复杂。

有没有办法手动执行重试?还是留住听众?谢谢!

1 个答案:

答案 0 :(得分:0)

您所经历的和您得出的结论完全一样。 imho背后的逻辑也很完美。请求是一个拥有国家的生物,它的生命就会消亡。你扔在海里的球。球飞溅然后下沉。你不能真正得到球回来,而是你得到另一个完全相同的球并再次投球。

请求包含的数据很重要,可以重复使用。您可以使用此数据,http方法和uri克隆/重新创建请求。当然,其他描述行为的参数应该以更通用的方式获得。以类似的方式,我在jus中使请求变为clonable,这是一个基于凌空但更多进化的库。