uber java sdk:rideeestimate、vehicle和driver为空

wyyhbhjk  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(263)

我正在构建一个应用程序,并在沙盒环境中使用uberjavasdk。问题是uber为rideestimate、vehicle和driver类返回的null。
Mavenpom:

  1. <dependency>
  2. <groupId>com.uber.sdk</groupId>
  3. <artifactId>rides</artifactId>
  4. <version>0.6.0</version>
  5. </dependency>

我的示例servlet代码:

  1. @Override
  2. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
  3. if (this.getOnceOnly()<2) {
  4. // Fetch the user's profile.
  5. UserProfile userProfile = uberRidesService.getUserProfile().execute().body();
  6. response.setContentType("text/html");
  7. response.setStatus(HttpServletResponse.SC_OK);
  8. response.getWriter().printf("Logged in as %s%n", userProfile.getEmail());
  9. // Publika West Gate 3.171282f 101.664771f
  10. // Publika East Side 3.170816f 101.667760f
  11. float startLatitude = 3.170730f;
  12. float startLongitude = 101.665129f;
  13. float destinationLatitude = 3.170816f;
  14. float destinationLongitude = 101.667760f;
  15. // Get products for location
  16. Response<ProductsResponse> responseGet = uberRidesService.getProducts(startLatitude, startLongitude).execute();
  17. List<Product> products = responseGet.body().getProducts();
  18. String productId = products.get(0).getProductId();
  19. System.out.println("responseGet: " + responseGet.code() + " " + responseGet.message());
  20. Response<TimeEstimatesResponse> responseTime = uberRidesService.getPickupTimeEstimate( startLatitude, startLongitude, productId).execute();
  21. List<TimeEstimate> timeEst = responseTime.body().getTimes();
  22. System.out.println("responseTime: " + responseTime.code() + " " + responseTime.message());
  23. //Response<PriceEstimatesResponse> responsePrice = uberRidesService.getPriceEstimates(3.170730f, 101.665129f, 3.171812f, 101.671201f).execute();
  24. Response<PriceEstimatesResponse> responsePrice = uberRidesService.getPriceEstimates(startLatitude, startLongitude, destinationLatitude , destinationLongitude).execute();
  25. List<PriceEstimate> priceEst = responsePrice.body().getPrices();
  26. System.out.println("responsePrice: " + responsePrice.code() + " " + responsePrice.message());
  27. // Get upfront fare for product with start/end location
  28. RideRequestParameters rideRequestParameters = new RideRequestParameters.Builder().setPickupCoordinates(startLatitude, startLongitude)
  29. .setProductId(productId)
  30. .setDropoffCoordinates(destinationLatitude , destinationLongitude)
  31. .build();
  32. Response <RideEstimate> responseRideEstimate = uberRidesService.estimateRide(rideRequestParameters).execute();
  33. System.out.println("responseRideEstimate: " + responseRideEstimate.code() + " " + responseRideEstimate.message());
  34. RideEstimate rideEstimate = responseRideEstimate.body();
  35. //String estFareId = rideEstimate.getEstimate().getFareId();
  36. System.out.println("\nresponseRideEstimate.errorBody: "+ responseRideEstimate.errorBody());
  37. System.out.println("\nresponseRideEstimate.rawCode: "+ responseRideEstimate.raw().code());
  38. System.out.println("\nrideEstimate:"+ rideEstimate +"\n");
  39. System.out.println("\nrideEstimate.getPickupEstimate: "+ rideEstimate.getPickupEstimate());
  40. System.out.println("\nrideEstimate.getDisplay: "+ rideEstimate.getFare().getDisplay());
  41. System.out.println("\nrideEstimate.getFareId: "+ rideEstimate.getFare().getFareId());
  42. System.out.println("\nrideEstimate.getExpiresAt: "+ rideEstimate.getFare().getExpiresAt());
  43. System.out.println("\nrideEstimate.getValue: "+ rideEstimate.getFare().getValue());
  44. System.out.println("\nrideEstimate.getDistanceEstimate: "+ rideEstimate.getTrip().getDistanceEstimate());
  45. System.out.println("\nrideEstimate.getDistanceUnit: "+ rideEstimate.getTrip().getDistanceUnit());
  46. System.out.println("\nrideEstimate.getDurationEstimate: "+ rideEstimate.getTrip().getDurationEstimate());
  47. **// All these will cause an Http Error 500: null returned from Uber**
  48. //System.out.println("\ngetCurrencyCode: "+ rideEstimate.getEstimate().getCurrencyCode());
  49. //System.out.println("\ngetFareId: "+ rideEstimate.getEstimate().getFareId());
  50. //System.out.println("\ngetSurgeConfirmationHref: "+ rideEstimate.getEstimate().getSurgeConfirmationHref());
  51. //System.out.println("\ngetSurgeConfirmationId: "+ rideEstimate.getEstimate().getSurgeConfirmationId());
  52. //System.out.println("\ngetMinimum: "+ rideEstimate.getEstimate().getMinimum());
  53. //System.out.println("\ngetSurgeMultiplier: "+ rideEstimate.getEstimate().getSurgeMultiplier());
  54. //System.out.println("\ngetHighEstimate: "+ rideEstimate.getEstimate().getHighEstimate());
  55. //System.out.println("\ngetLowEstimate: "+ rideEstimate.getEstimate().getLowEstimate());
  56. //System.out.println("\ngetDisplay: "+ rideEstimate.getEstimate().getDisplay());
  57. String fareId = rideEstimate.getFare().getFareId();
  58. //double surgeRate = rideEstimate.getEstimate().getSurgeMultiplier();
  59. System.out.println("options: " +"\n");
  60. for (int i = 0; i< products.size(); i++ ) {
  61. System.out.println(products.get(i).getProductId() +" tt " + products.get(i).getDisplayName() + " Plate " + ""
  62. + " other " + " " + rideEstimate.getFare().getDisplay()
  63. + "" );
  64. String output = "<br/> Pid "+ products.get(i).getProductId()
  65. +" name "+products.get(i).getDisplayName()
  66. +" cap "+ products.get(i).getCapacity();
  67. //+" other "+ responseTime.message() ;
  68. response.getWriter().printf(output);
  69. }
  70. // Request ride with upfront fare for product with start/end location
  71. /*RideRequestParameters*/ rideRequestParameters = new RideRequestParameters.Builder().setPickupCoordinates(startLatitude, startLongitude)
  72. .setProductId(productId)
  73. .setFareId(fareId)
  74. .setDropoffCoordinates(destinationLatitude , destinationLongitude)
  75. .build();
  76. Response <Ride> responseRide = uberRidesService.requestRide(rideRequestParameters).execute();
  77. System.out.println("responseRide: " + responseRide.code() + " " + responseRide.message());
  78. //Ride ride = responseRide.body();
  79. Response<Void> responseUpdateRide = null;
  80. System.out.println("\nresponseRaw.code: "+ responseRide.raw().code());
  81. if (responseRide.code()==409) {
  82. System.out.println("\nresponseRide.errorBody: "+ responseRide.errorBody().string());
  83. System.out.println("\nresponseRide.errorBody: "+ responseRide.errorBody().contentType().toString());
  84. System.out.println("\nresponseRide.errorBody: "+ responseRide.headers().names());
  85. System.out.println("\nuberRidesService.getCurrentRide: "+ uberRidesService.getCurrentRide().toString());
  86. System.out.println("\nCancelCurrentRide: "+ uberRidesService.getCurrentRide().isCanceled());
  87. // Due to current user on trip, keep getting Error 409.
  88. if (uberRidesService.getCurrentRide().isCanceled()!=true) {
  89. //uberRidesService.getCurrentRide().cancel();
  90. System.out.println("Canceling initiated...");
  91. //Response<Void> responseCancel = uberRidesService.cancelCurrentRide().execute();
  92. SandboxRideRequestParameters rideAcceptedParameters = new SandboxRideRequestParameters.Builder().setStatus(Ride.Status.DRIVER_CANCELED.toString()).build();
  93. /*Response<Void>*/ responseUpdateRide = uberRidesService.updateSandboxRide(responseRide.body().getRideId(), rideAcceptedParameters).execute();
  94. //System.out.println("\nresponseCancel: " + responseCancel.errorBody().toString());
  95. // Get products again
  96. System.out.println("Request product from Uber again");
  97. responseGet = uberRidesService.getProducts(startLatitude, startLongitude).execute();
  98. List<Product> products2 = responseGet.body().getProducts();
  99. String productId2 = products2.get(0).getProductId();
  100. rideRequestParameters = new RideRequestParameters.Builder().setPickupCoordinates(startLatitude, startLongitude)
  101. .setProductId(productId2)
  102. //.setFareId(fareId)
  103. .setDropoffCoordinates(destinationLatitude , destinationLongitude)
  104. .build();
  105. responseRideEstimate = uberRidesService.estimateRide(rideRequestParameters).execute();
  106. rideEstimate = responseRideEstimate.body();
  107. fareId = rideEstimate.getFare().getFareId();
  108. rideRequestParameters = new RideRequestParameters.Builder().setPickupCoordinates(startLatitude, startLongitude)
  109. .setProductId(productId2)
  110. .setFareId(fareId)
  111. .setDropoffCoordinates(destinationLatitude , destinationLongitude)
  112. .build();
  113. responseRide = uberRidesService.requestRide(rideRequestParameters).execute();
  114. }
  115. System.out.println("\nCancelCurrentRide: "+ uberRidesService.getCurrentRide().isCanceled());
  116. }
  117. //else {
  118. Ride ride = responseRide.body();
  119. System.out.println("\nride: "+ ride);
  120. System.out.println("\nride.getRideId: "+ ride.getRideId());
  121. System.out.println("\nride.getStatus(): "+ ride.getStatus());
  122. System.out.println("\nride.getProductId(): "+ ride.getProductId());
  123. System.out.println("\nride.getDestination(): "+ ride.getDestination().getLatitude() + ", " +ride.getDestination().getLongitude());
  124. System.out.println("\nride.getDestination().getEta(): "+ ride.getDestination().getEta()); // this is null
  125. System.out.println("\nride.getPickup(): "+ ride.getPickup().getLatitude() + ", " +ride.getPickup().getLongitude());
  126. System.out.println("\nride.getPickup().getEta(): "+ ride.getPickup().getEta()); // this is null
  127. System.out.println("\nride.getSurgeMultiplier(): "+ ride.getSurgeMultiplier());
  128. System.out.println("\nride.getVehicle(): "+ ride.getVehicle());
  129. **// All of the following returned HTTP Error 500: Problem accessing /. Reason: null pointer exception from Uber**
  130. //System.out.println("\nride.getDriver().getName(): "+ ride.getDriver().getName());
  131. //System.out.println("\nride.getLocation(): "+ ride.getLocation());
  132. //System.out.println("\nride.getVehicle(): "+ ride.getVehicle().toString());
  133. //System.out.println("\nride.getDriver().getName(): "+ ride.getDriver().toString());
  134. //}
  135. //System.out.println("\ngetRideId: "+ ride.getRideId());
  136. //System.out.println("\ngetProductId: "+ ride.getProductId());
  137. //String rideId = ride.getRideId();
  138. SandboxRideRequestParameters rideAcceptedParameters = new SandboxRideRequestParameters.Builder().setStatus(Ride.Status.ACCEPTED.toString()).build();
  139. responseUpdateRide = uberRidesService.updateSandboxRide(responseRide.body().getRideId(), rideAcceptedParameters).execute();
  140. // Request ride details from request_id
  141. //responseRide = uberRidesService.getRideDetails(rideId).execute();
  142. System.out.println("responseRide: " + responseRide.code() + " " + responseRide.message());
  143. System.out.println("\nride.getStatus(): "+ ride.getStatus());
  144. System.out.println("\nresponseUpdateRide: " + responseUpdateRide.code() + " " + responseUpdateRide.message());
  145. if (responseUpdateRide.code()!=202) {
  146. System.out.println("\nresponseUpdateRide.errorBody: " + responseUpdateRide.errorBody().string());
  147. }

从上面可以看出,rideeestimate、vehicle和driver类都会导致空指针。这真的很奇怪,我可以要求乘坐成功没有车辆或司机附加到乘坐请求。我找到了一个解决办法,让通过rideeestimate返回一个空值(见我的代码上面),但我找不到一个解决办法的车辆和司机也为空。
因此,如果有任何其他方法可以使车辆和驾驶员为空,请通知我。另外,有一些关于使用沙盒更新状态的例子也不错。

mm9b1k5b

mm9b1k5b1#

当你请求一次乘坐-它被创建为“处理”状态-在这一点上,司机仍然是未知的-因为司机还没有接受这个请求。这就是为什么我们不能得到任何司机或车辆信息的原因。沙盒不会自动在骑乘中移动,但您可以手动将骑乘请求置于每个状态:
“目前,沙盒不会像生产中的实际请求那样自动更改状态。此端点使应用程序能够遍历乘坐请求的不同状态。”
有关更多详细信息,请参阅沙盒指南:https://developer.uber.com/docs/riders/guides/sandbox.
要检查乘坐请求的生命周期,请阅读此文档。

相关问题