我是Retrofit 2的新手,正在尝试在我的应用程序中集成Google Place API。我的问题是如何在使用Retrofit 2.0的同时使用这种动态URL。
URL:
https://maps.googleapis.com/maps/api/place/autocomplete/json?input="{Place Name}"&location="{Lat,long}"&key="{API KEY}"
我的模型类名称为:
1)位置自动完成
位置预测
public class PlaceAutoComplete {
private String place_id;
private String description;
public String getPlaceDesc() {
return description;
}
public void setPlaceDesc(String placeDesc) {
description = placeDesc;
}
public String getPlaceID() {
return place_id;
}
public void setPlaceID(String placeID) {
place_id = placeID;
}
}
以及
public class PlacePredictions {
public ArrayList<PlaceAutoComplete> getPlaces() {
return predictions;
}
public void setPlaces(ArrayList<PlaceAutoComplete> places) {
this.predictions = places;
}
private ArrayList<PlaceAutoComplete> predictions;
}
我已经创建了WebServiceCall。java类进行改造,这是我的代码
public class WebServiceCall {
private static WebServiceCall webServiceCall;
public RetrofitService retrofitService;
private String currentDateTimeString;
public WebServiceCall() {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
if (Boolean.parseBoolean("true")) {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
clientBuilder.connectTimeout(100000, TimeUnit.MILLISECONDS);
clientBuilder.addInterceptor(httpLoggingInterceptor);
}
retrofitService = new Retrofit.Builder()
.baseUrl("https://maps.googleapis.com/maps/api/place/autocomplete/json")
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(RetrofitService.class);
currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
}
public static WebServiceCall getInstance() {
if (webServiceCall == null) {
webServiceCall = new WebServiceCall();
}
return webServiceCall;
}
}
我在调用URL时使用了这个接口:但我无法继续。
public interface RetrofitService {
@GET("?input=")
Call<PlaceAutoComplete> getInput(@Url String url);
}
我一直在谷歌和StackOverflow中搜索,但没有让我明白。详细的解释将是非常值得赞赏的。
非常感谢。
在您的界面中
@获取调用加载配置文件(@Url字符串Url);
从调用服务器的位置添加此函数。
public void loadServerData() {
ApiInterface apiInterface = ApiClient.getClient().create(ApiInterface.class);
Call<PojoClass> call = apiInterface.loadProfile("https://maps.googleapis.com/maps/api/place/autocomplete/json?input="{Place Name}"&location="{Lat,long}"&key="{API KEY}"");
call.enqueue(new Callback<PojoClass>() {
@Override
public void onResponse(Call<PojoClass> call, Response<PojoClass> response) {
updateUI();
}
@Override
public void onFailure(Call<PojoClass> call, Throwable t) {
}
});
}
和APIClient类
public class ApiClient {
private static final String Base_URL = Constants.URL.BASE_URL;
private static Retrofit retrofit = null;
private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(Base_URL)
.addConverterFactory(GsonConverterFactory.create());
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(Base_URL)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()))
.build();
}
return retrofit;
}
public static <S> S createService(Class<S> serviceClass) {
return createService(serviceClass, null);
}
public static <S> S createService(Class<S> serviceClass, final RequestBody body) {
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.header("Accept", "application/json")
.method(original.method(), body);
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.build();
Retrofit retrofit = builder.client(client).build();
return retrofit.create(serviceClass);
}
}
改装1:
@GET("/place/autocomplete/json")
void getDetails(
@Query("input") String input,
@Query("location") String location,
@Query("key") String key,
Callback<Response> callback);
如果参数未知,应创建如下参数:
@GET("/place/autocomplete/json")
@FormUrlEncoded
void getDetails(
@FieldMap Map<String, String> params,
Callback<Response> callback);
改装2
@GET("place/autocomplete/json")
Call<List<Response>> getDetails(
@Query("input") String input,
@Query("location") String location,
@Query("key") String key);
对于未知参数:
@GET("place/autocomplete/json")
Call<List<Response>> getDetails(
@QueryMap Map<String, String> options);
您应该按照以下方式进行设置,即在基本URL的末尾/尾随:
retrofitService = new Retrofit.Builder()
.baseUrl("https://maps.googleapis.com/maps/api/")
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
你为什么要这么做?您可以在此处找到:https://stackoverflow.com/a/32356916/3863689
我想要这样的url baseURL/dealer/index.php?r=rest/packinfo 我开始犯错了 URL查询字符串“r=rest/{method}”不能有replace block。对于动态查询参数,请使用@query。
运行已经做好的博客框架, 会发现一个问题, 只有一个主页的空盒子, 而大部分时候我们希望能够让每篇博客文章都有一个独立的页面. 我第一个想到的方法是给每篇博客文章加一个view函数逻辑, 然后设置一个独立的url(我不知道语言比如PHP, 或者web框架rail等是如果解决的, 我是第一次仔细的学习web框架, 也没有前端开发经验), 但是这种方法耦合性太强, 而且用户不友好, 缺点非常多 Dja
本文向大家介绍JS来动态的修改url实现对url的增删查改,包括了JS来动态的修改url实现对url的增删查改的使用技巧和注意事项,需要的朋友参考一下 虽然可以通过get方式提交post表单等方式来动态修改url,但如果多个按钮能并行提交时,写多个大体相同,又有些细节差异的表单,难免有些不妥,因此,想到了通过JS来动态的修改url,来实现对url的增删查改。
其实相对于VIP的切换,动态修改持久化则是比较常见的一个需求,一般在一主多从多Sentinel的HA环境中,为了性能常常在Master上关闭持久化,而在Slave上开启持久化,但是如果发生切换就必须有人工干预才能实现这个功能。可以利用client-reconfig-script自动化该进程,无需人工守护,我们就以RDB的动态控制为例: Sentinel配置文件如下: sentinel client
本文向大家介绍JS动态修改图片的URL(src)的方法,包括了JS动态修改图片的URL(src)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS动态修改图片的URL(src)的方法。分享给大家供大家参考。具体如下: 下面的JS代码可以动态修改图片地址,以显示一张新的图片,实际上是通过修改图片的src属性来实现的 希望本文所述对大家的javascript程序设计有所帮助。
我正在工作的一个项目,允许人们列出手机出售,并能够查看所有的手机出售。我的工作正常。jsp返回一个包含所有电话及其所有详细信息的列表。如品牌、型号、网络、存储、颜色、屏幕大小等。 问题是,它需要设置,以便您只看到“品牌”和“型号”(例如“i Phone”“6”),然后能够点击“更多信息”查看其余的细节。这个'more info'按钮应该会打开一个包含手机全部细节的新jsp。 抱歉,如果我没有提供足