Java 改装:URL查询字符串不能有替换块

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

我试图从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}&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我该怎么做?看答案。