2017-10-23 2 views
0
내가 Retrofit2의 처음 사용하고

을 예상하고이 오류가있어 : 내가 아는Retrofit2은 : BEGIN_ARRAY

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 

내 문제는 내 POJO 클래스입니다하지만 난 내 문제 야에 적합한 솔루션을 찾을 수 있습니다 WCF 웹 서비스 만들기이 서비스는 내 사용자 클래스의 Arraylist를 json으로 반환합니다.

@POST("json/GetUsers") 
Call<List<User>> getAllUsers(); 

:

public class User { 

@SerializedName("UserInfo") 
private ExpChild mChildrenList; 
private String UserName, CreationDateTime,Id,Topic; 


public User(String mUserName,String mCreationDateTime,String mId, 
       String mTopic) { 
    UserName = mUserName; 
    CreationDateTime = mCreationDateTime; 
    Id = mId; 
    Topic = mTopic; 
} 

이 내 클라이언트 포스트 방법에 대한 인터페이스입니다 : 내가 POJO 클래스를 생성 한

{ 
"GetUsersResult": [ 
    { 
     "CreationDateTime": "/Date(1508174478395)/", 
     "Id": "8e601956-04ab-4464-9f84-c129141b8198", 
     "Topic": "Topics", 
     "UserInfo": { 
      "Age": "15", 
      "Email": "", 
      "LastName": "choopani", 
      "Name": "niloofar", 
      "SimId": "89984320001079005854" 
     }, 
     "UserName": "niloo" 
    },... 

내 응답에 따르면이 포스터에 의해 WCF 서버에서 내 jsom 응답입니다 보시다시피, 나는 내 사용자의 목록을 반환하고 싶습니다. 그 후 내가 개조 서비스 창조자를 만들어 내 주요 활동으로 나는 그것을 사용했습니다 :

 allUsers.enqueue(new Callback<List<User>>() { 
     @Override 
     public void onResponse(Call<List<User>> call, Response<List<User>> response) { 
      List<User> users = response.body(); 
     } 

     @Override 
     public void onFailure(Call<List<User>> call, Throwable t) { 
      Toast.makeText(MainActivity.this, "faild to connect", Toast.LENGTH_SHORT).show(); 
      Log.i("====>", "onFailure: "+ t.getMessage()); 
     } 
    }); 

을하지만 오류가 위에있어! 내 실수는 어디에 있습니까?

답변

1

서버가 JSON 객체를 반환하지만 인터페이스에 JSON 배열이 필요한 것으로 표시됩니다. (List 유형).

public class ServerResponse { 
    @SerializedName("GetUsersResult") 
    private List<User> users; 

    ... Constructor and getters here 
} 

가 그런 개조 인터페이스 오류를 수정, 반환 된 JSON과 일치 Call<ServerResponse>을 반환해야합니다 :

당신은 서버에서 전체 응답을 표현하는 두 번째 목적이 필요합니다.

+0

작업입니다. – sayres

관련 문제