2017-07-30 183 views
0

我有以下JSON結構:

[ 
    { 
    "userId": 1, 
    "id": 1, 
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", 
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" 
    }, 
    { 
    "userId": 1, 
    "id": 2, 
    "title": "qui est esse", 
    "body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla" 
    } 
] 

我試圖用Retrofit 2.x。我想獲得用戶的列表要消耗這個JSON 。

這裏是我的APIService interface

public interface APIService { 

    @POST("posts") 
    Call<List<FakeJSON>> getItems(); 
} 

這裏是我的POJO類:

public class FakeJSON { 

    @SerializedName("userId") 
    @Expose 
    private int userId; 
    @SerializedName("id") 
    @Expose 
    private int id; 
    @SerializedName("title") 
    @Expose 
    private String title; 
    @SerializedName("body") 
    @Expose 
    private String body; 

    /** 
    * No args constructor for use in serialization 
    * 
    */ 
    public FakeJSON() { 
    } 

    /** 
    * 
    * @param id 
    * @param body 
    * @param title 
    * @param userId 
    */ 
    public FakeJSON(int userId, int id, String title, String body) { 
     super(); 
     this.userId = userId; 
     this.id = id; 
     this.title = title; 
     this.body = body; 
    } 

    public int getUserId() { 
     return userId; 
    } 

    public void setUserId(int userId) { 
     this.userId = userId; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getBody() { 
     return body; 
    } 

    public void setBody(String body) { 
     this.body = body; 
    } 

} 

最後這裏是我的Activity代碼,我想提出的網絡呼叫:

public class NetworkActivity extends AppCompatActivity { 

    private static Retrofit.Builder builder = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_network); 
     OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
     builder = new Retrofit.Builder() 
       .baseUrl("https://jsonplaceholder.typicode.com/") 
       .addConverterFactory(GsonConverterFactory.create()); 

     Retrofit retrofit = 
       builder 
         .client(
           httpClient.build() 
         ) 
         .build(); 
     APIService apiService = retrofit.create(APIService.class); 

     Call<List<FakeJSON>> listCall = apiService.getItems(); 

     listCall.enqueue(new Callback<List<FakeJSON>>() { 
      @Override 
      public void onResponse(Call<List<FakeJSON>> call, Response<List<FakeJSON>> response) { 
       try { 
        Log.e("List Size", response.body().size()+""); 
       }catch (NullPointerException e){ 
        e.printStackTrace();; 
       } 
      } 

      @Override 
      public void onFailure(Call<List<FakeJSON>> call, Throwable t) { 
       Log.e("Error", t.getMessage()); 
      } 
     }); 
    } 
} 

每當我運行該應用程序,我收到以下異常:

E/Error: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

我在做什麼錯在這裏?

+1

檢查可能會對您有所幫助:https://stackoverflow.com/a/38351872/6021469 –

+0

已經看到了這個。沒有爲我工作:( – XoXo

+0

這是我的錯誤,我做了@ POST而不是'@ GET' :) – XoXo

回答

1

'E/Error: Expected BEGIN_ARRAY but was BEGIN_OBJECT

這意味着一個改型面臨JSON對象,而不是陣列。 也許你從服務器得到一些錯誤? 嘗試手動執行相同的查詢並查看響應。 也許這樣你就會發現代碼中的請求有什麼問題。

+0

這是我的錯誤。我做了一個'@ POST'而不是'@ GET' :) – XoXo

相關問題