java.io.EOFException:Android改造中第1行第1行路径$的输入结束

时间:2017-04-17 03:51:12

标签: java android rest retrofit2

我使用Retrofit来使用REST API端点,并且我遇到了以下问题。 我认为TransactionResponse类上的数据模型出了问题,但还不确定。

  

java.io.EOFException:第1行第1行路径$ in的输入结束   Android改造

我的通话请求如下。

 @FormUrlEncoded
@POST("/ifapi.php")
Call<TransactionResponse> loadData(@Field("user") TransactionRequest user);

TransactionRequest类:

import javax.annotation.Generated;

@Generated("org.jsonschema2pojo")

public class TransactionResponse {

    private Settings settings;
    /**
     *
     * @return
     * The settings
     */

    public Settings getSettings()
    {
        return settings;
    }
    /**
     *
     * @param settings
     * The settings
     */

    public void setSettings(Settings settings)
    {
        this.settings = settings;
    }

    private Actions actions;
    /**
     *
     * @return
     * The actions
     */
    public Actions getActions()
    {
        return actions;
    }
    /**
     *
     * @param actions
     * The actions
     */
    public void setActions(Actions actions)
    {
        this.actions = actions;
    }
}

以下是实际调用的代码。

OkHttpClient httpClient = new OkHttpClient.Builder().build();
                            Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(RestAPI.BASE_URL).client(httpClient).build();
                            RestAPI service = retrofit.create(RestAPI.class);
                            Call<TransactionResponse> meResponse = service.loadData(request);
                                meResponse.enqueue(new Callback<TransactionResponse>() {
                                    @Override
                                    public void onResponse(Call<TransactionResponse> call, Response<TransactionResponse> response) {
                                        if (response.isSuccessful()) {
                                            TransactionResponse body = response.body();
                                            Actions actions = body.getActions();
                                            Map<String, String> params = actions.getParams();
                                        }
                                    }

                                    @Override
                                    public void onFailure(Call<TransactionResponse> call, Throwable t) {
                                        t.printStackTrace();
                                    }
                                });
                            }
                            catch(Exception e)
                            {
                                e.printStackTrace();
                            }
                            }

任何人都可以帮助我吗?提前谢谢。

我使用以下库。

compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'javax.annotation:javax.annotation-api:1.2'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'

P.S我发现该请求适用于表单数据,但不适用于JSON数据。 enter image description here

2 个答案:

答案 0 :(得分:3)

我找到了解决方案,你需要在表单中发布如下的每个参数,而不是在包装器类中。

@FormUrlEncoded

@POST("/ifapi.php")

Call<TransactionResponse> loadData(@Field("app_id") String app_id, @Field("install_id") String install_id, @Field("useragent") String useragent, @Field("ip") String ip, @Field("mccmnc") String mccmnc, @Field("action") String action );

主要活动部分。

OkHttpClient httpClient = new OkHttpClient.Builder().build();
Gson gson = new GsonBuilder()
                                       .setLenient()
                                       .create();
Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(gson)).baseUrl(RestAPI.BASE_URL).client(httpClient).build();

RestAPI service = retrofit.create(RestAPI.class);
Call<TransactionResponse> meResponse = service.loadData("1", getUUID(), getUserAgent(), getIPAddress(), "20404", "start");

希望这能解决你的问题,问候。

答案 1 :(得分:0)

当我使用协程时,没有帮我从函数调用中返回任何内容的

@GET
@Headers("X-Requested-With:XMLHttpRequest")
suspend fun functionCall(
    @Url url: String
)