Модернизация, как передать местоположение в сторону GET - PullRequest
1 голос
/ 25 января 2020

Я хочу показать близлежащие рестораны, используя мое текущее местоположение. Я использую Retrofit, но я не знаю, как передать мою текущую широту и долготу в GET. Я использую ZOMATO API для получения информации о ресторанах. Мой геокод URL

Если я получу свое местоположение в MainActivity, то как передать его в GET.

Пожалуйста, помогите мне, я впервые работаю с Retrofit и API.

Мой класс интерфейса - ZomatoApi. java

package com.example.zomatoapi;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Headers;

public interface ZomatoApi {

String baseUrl = "https://developers.zomato.com/api/v2.1/";

@Headers("user-key: 1d63821dbb228ee5d09e8c8f7cfe10c3")
@GET("geocode?lat=18.521428&lon=73.8544541")
   Call<CurrentCity> getRestaurant();

}

MainActivity

package com.example.zomatoapi;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;

import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

private FusedLocationProviderClient mFusedLocationClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    Retrofit retrofit = new Retrofit.Builder().baseUrl(ZomatoApi.baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    ZomatoApi zomatoApi = retrofit.create(ZomatoApi.class);

    final ListView listView = findViewById(R.id.restaurantList);

    final ArrayList<String> restaurantNames = new ArrayList<>();

    Call<CurrentCity> listCall = zomatoApi.getRestaurant();

    listCall.enqueue(new Callback<CurrentCity>() {
        @Override
        public void onResponse(Call<CurrentCity> call, Response<CurrentCity> response) {

            CurrentCity currentCity = response.body();

            List<NearbyRestaurant> nearbyRestaurants = currentCity.getNearbyRestaurants();

            for (NearbyRestaurant nearbyRestaurant : nearbyRestaurants) {
                Restaurant restaurant = nearbyRestaurant.getRestaurant();

                Log.i("heyy", restaurant.getName());

                restaurantNames.add(restaurant.getName());
            }

            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, restaurantNames);
            listView.setAdapter(arrayAdapter);
        }

        @Override
        public void onFailure(Call<CurrentCity> call, Throwable t) {

        }
    });

}

}

Ответы [ 2 ]

0 голосов
/ 25 января 2020

В соответствии с заданной документацией Zomato, он принимает lat / lng в качестве параметров запроса.

Попробуйте что-то вроде ниже

@Headers("user-key: xxxxxxxxxxxxxxx")
    @GET("/geocode?")
        Call<CurrentCity> getRestaurant(@Query(“lat”) double lat, @Query(“lng”) double lng);
0 голосов
/ 25 января 2020

Попробуйте:

 @POST("nearestrestaurants?key=your_api_key")
// Call<MySnappedPoints> getNearestrestaurants();
Call<MySnappedPoints> getNearestRoad(@Query("points") String points);

Чтобы получить очки:

 String test = Double.toString(mGoogleMap.getCameraPosition().target.latitude) + "," + 
Double.toString(mGoogleMap.getCameraPosition().target.longitude);
Call<MySnappedPoints> call = retrofitClientMap.getNearestRoad(test);
...