Java 改装:URL查询字符串不能有替换块
我试图从IGDB api发出请求,但得到以下错误:Java 改装:URL查询字符串不能有替换块,java,android,android-studio,retrofit,Java,Android,Android Studio,Retrofit,我试图从IGDB api发出请求,但得到以下错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{leandro.com.gameloversapp/leandro.com.gameloversapp.Presentation.Main.MainActivity}: java.lang.IllegalArgumentException: URL query string "fields={fields}&am
java.lang.RuntimeException: Unable to start activity ComponentInfo{leandro.com.gameloversapp/leandro.com.gameloversapp.Presentation.Main.MainActivity}: java.lang.IllegalArgumentException: URL query string "fields={fields}&filter[release_dates.platform][any]={platform}" must not have replace block. For dynamic query parameters use @Query.
for method IGameApi.getGameByPlatform
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:169)
at android.app.ActivityThread.main(ActivityThread.java:6568)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.IllegalArgumentException: URL query string "fields={fields}&filter[release_dates.platform][any]={platform}" must not have replace block. For dynamic query parameters use @Query.
for method IGameApi.getGameByPlatform
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:755)
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:746)
at retrofit2.ServiceMethod$Builder.parseHttpMethodAndPath(ServiceMethod.java:303)
at retrofit2.ServiceMethod$Builder.parseMethodAnnotation(ServiceMethod.java:248)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:175)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
at $Proxy0.getGameByPlatform(Unknown Source)
at leandro.com.gameloversapp.Server.GameServer.getGameByPlatform(GameServer.java:39)
at leandro.com.gameloversapp.Presentation.Main.MainPresenter.getGamesBylatform(MainPresenter.java:34)
at leandro.com.gameloversapp.Presentation.Main.MainActivity.onCreate(MainActivity.java:26)
at android.app.Activity.performCreate(Activity.java:7016)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
这些是纽约的课程:
public interface IGameApi {
@GET("/games/?fields=name,cover&filter[release_dates.platform][any]={platform}")
@Headers("Accept:application/json")
Call<List<Games>> getGameByPlatform(@Query("platform") int platform, @Header("user-key") String key);
}
公共接口IGameApi{
@获取(“/games/?fields=名称、封面和过滤器[发布日期.平台][任何]={platform}”)
@标题(“接受:应用程序/json”)
调用getGameByPlatform(@Query(“platform”)int platform,@Header(“user key”)字符串键);
}
GameServer.java
public class GameServer {
private static IGameApi iGameApi;
private static GameServer gameServer;
Context context;
public GameServer(Context mContext) {
this.context = mContext;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(context.getString(R.string.base_url))
.addConverterFactory(GsonConverterFactory.create())
.build();
iGameApi = retrofit.create(IGameApi.class);
}
public static GameServer getInstance(Context context){
if(gameServer == null){
gameServer = new GameServer(context);
}
return gameServer;
}
public void getGameByPlatform(int platform,String user_key, Callback<List<Games>> callback){
Call<List<Games>> gamesCall = iGameApi.getGameByPlatform(platform, user_key);
gamesCall.enqueue(callback);
}
}
公共类游戏服务器{
私有静态IGameApi IGameApi;
私有静态游戏服务器;
语境;
公共游戏服务器(上下文mContext){
this.context=mContext;
改装改装=新改装.Builder()
.baseUrl(context.getString(R.string.base_url))
.addConverterFactory(GsonConverterFactory.create())
.build();
iGameApi=改装.create(iGameApi.class);
}
公共静态GameServer getInstance(上下文){
如果(gameServer==null){
gameServer=新gameServer(上下文);
}
返回游戏服务器;
}
public void getGameByPlatform(int-platform,字符串用户_键,回调){
调用gamesCall=iGameApi.getGameByPlatform(平台,用户密钥);
gamesCall.enqueue(回调);
}
}
该请求在postman应用程序中起作用
有人能帮我吗?试试这个
@GET("/games/?fields=name,cover")
@Headers("Accept:application/json")
Call<List<Games>> getGameByPlatform(@Query("filter[release_dates.platform][any]") int platform, @Header("user-key") String key);
@GET(“/games/?fields=name,cover”)
@标题(“接受:应用程序/json”)
调用getGameByPlatform(@Query(“filter[release_dates.platform][any]”)intplatform,@Header(“user key”)字符串键);
使用@Path
查询的实例
public interface IGameApi {
@GET("/games/?fields=name,cover&filter[release_dates.platform][any]={platform}")
@Headers("Accept:application/json")
Call<List<Games>> getGameByPlatform(@Path("platform") int platform, @Header("user-key") String key);
}
公共接口IGameApi{
@获取(“/games/?fields=名称、封面和过滤器[发布日期.平台][任何]={platform}”)
@标题(“接受:应用程序/json”)
调用getGameByPlatform(@Path(“platform”)int platform,@Header(“user key”)字符串键);
}
Reformation不允许您在使用@Query时使用替换块。这是替换块[release_dates.platform]。所以你必须找到另一种方法来做这件事。@momentzaq我该怎么做?看答案。