我使用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'
答案 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
)