2017-07-30 180 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

相关问题