У меня есть список идентификаторов мест, хранящихся в моем приложении для Android.Я сделал это согласно документации Google по хранению.Теперь я хотел бы получить их данные о месте при загрузке моего приложения.Есть ли способ загрузить их через многопоточность с помощью API задач и задач.Я пытался поэкспериментировать с ними, а также с Executor и FutureTask, но у меня ничего не получилось.
Вот мой тестовый код:
public class GetPlaces implements Callable {
private String placeId;
private PlacesClient placesClient;
public GetPlaces(PlacesClient placesClient, String placeId) {
this.placeId = placeId;
this.placesClient = placesClient;
}
@Override
public Object call() throws Exception {
String placeId = this.placeId;
// Specify the fields to return.
List<Place.Field> placeFields = Arrays.asList(Place.Field.ADDRESS);
// Construct a request object, passing the place ID and fields array.
FetchPlaceRequest request = FetchPlaceRequest.builder(placeId, placeFields)
.build();
// create a FetchPlaceResponse task
Task<FetchPlaceResponse> task = placesClient.fetchPlace(request);
// Get the address and return value
return task;
}
}
Вот мойкод в onCreate ()
List<String> address = new ArrayList<>();
// Initialize Places.
Places.initialize(getApplicationContext(), getString(R.string.app_google_api_key));
// Create a new Places client instance.
PlacesClient placesClient = Places.createClient(this);
// Create a new ExecutorService with cached threadpool
ExecutorService executor = Executors.newCachedThreadPool();
// Create list to store the futuretasks
List<Task<FetchPlaceResponse>> taskList = new ArrayList<>();
for (int counter = 0; counter < list.size(); counter++) {
Task<FetchPlaceResponse> task = Tasks.call(executor, new GetPlaces(placesClient, PlaceIdList.get(counter));
taskList.add(task);
}
Task<List<Task<FetchPlaceResponse>>> taskResults = Tasks.whenAllSuccess(taskList);
List<Task<FetchPlaceResponse>> results = new ArrayList<>();
if (taskResults.isComplete()) {
results = taskResults.getResult();
}
for (int i = 0; i < results.size(); i++) {
FetchPlaceResponse response = results.get(i).getResult();
address.add(response.getPlace().getAddress());
}
// Shutdown the ExecutorService
executor.shutdown();