2017-04-17 95 views
2

我正在使用Retrofit來使用REST API端點,並遇到以下問題。 我認爲TransactionResponse類的數據模型有問題,但還不確定。

java.io.EOFException的:在第1行第1列路徑$輸入的結束在 的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

+0

看看這個[問題](https://github.com/square/retrofit/issues/1691)關於翻新github。它說你的身體長度是0 –

+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"); 

希望這會解決您的問題,關心。

+0

工作就像一個魅力,你救了我的一天!謝謝。 –

+0

好的工作。也爲我工作! –

相關問題