【问题标题】:Android Retrofit: adding the list from callback into classAndroid Retrofit:将回调列表添加到类中
【发布时间】:2015-12-28 18:04:57
【问题描述】:

我在这里第一次使用 Retrofit。

我想将我的 List 从 Callback 放到 UsersData 类中。这是不可能的。但是,如果我从用户数据中删除所有内容并将配置文件中的内容放入用户数据中,那么它就可以工作。但这并不能满足我的需求。我需要能够将 List 从 Callback 放到 UsersData 类中。

谢谢你的好处

在我的片段中

 App.getRestClient().getAttendanceService().getUsers(48, new Callback<List<UsersData>>() {
    @Override
    public void success(List<UsersData> usersDao, Response response) {

        String ble = usersDao.get(0).getResults().get(0).getFirstName();
        Toast.makeText(getActivity(),ble, Toast.LENGTH_SHORT).show();

    }

    @Override
    public void failure(RetrofitError error) {

    }
});

应用程序

public class App extends Application {

    private static RestClient restClient;

    public static App instance = null;

    public static Context getInstance() {
        if (null == instance) {
            instance = new App();
        }
        return instance;
    }

    @Override
    public void onCreate(){
        super.onCreate();
        restClient = new RestClient();
    }

    public static RestClient getRestClient(){
        return restClient;
    }
}

还有我的客户

public class RestClient {

    private static final String BASE_URL = "www.Link_to_json.com" ;
    private AttendanceService attendanceService;

    public RestClient()
    {
        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
                .create();

        RestAdapter restAdapter = new RestAdapter.Builder()
                //.setLogLevel(RestAdapter.LogLevel.FULL)
                .setEndpoint(BASE_URL)
                //.setClient(new OkClient(new OkHttpClient()))
                //.setConverter(new GsonConverter(gson))
                .build();

        attendanceService = restAdapter.create(AttendanceService.class);
    }

    public AttendanceService getAttendanceService()
    {
        return attendanceService;
    }
}

我的界面

public interface AttendanceService {

    @GET("/GetUsers")
    void getUsers(@Query("companyId") int i, Callback<List<UsersData>> u );

}

和用户数据

public class UsersData {

    private List<Profile>  results;
    public List<Profile> getResults() {
        return results;
    }

}

个人资料数据类:

public  String firstName;
public  String lastname;
public  int userId;
public  String userNameId;
...

json 示例:

[
    {
        "AttendanceDate":null,
        "AttendanceStatus":1,
        "AttendanceStatusDescription":null,
        "CompanyId":48,
        "Email":"",
        "FirstName":"Sindri",
        "Gender":1,
        "Gsm":"",
        "Id":259,
        "LastName":"yeh",
        "MiddleName":"",
        "Role":0,"UserId":"corp\\marg"
    },{
        "AttendanceDate":null,
        "AttendanceStatus":1,
        "AttendanceStatusDescription":null,
        "CompanyId":48,
        "Email":"",
        "FirstName":"David",
        "Gender":1,
        "Gsm":"",
        "Id":165,
        "LastName":"Guðmundsson",
        "MiddleName":"",
        "Role":0,"UserId":"corp\\marg"
    }
]

【问题讨论】:

  • 尝试给json数组一个key或name,并在model中分别处理

标签: android retrofit


【解决方案1】:

尝试将列表/数组包装在 UsersData 类本身中:

public interface AttendanceService {

    @GET("/GetUsers")
    void getUsers(@Query("companyId") int i, Callback<UsersData> u );
}

UsersData.java:

public class UsersData {

    public Profile[] results;

    public class Profile {
        public String firstName;
        public String lastname;
        public int userId;
        public String userNameId;
    }
}

在回调中,您可以遍历结果数组。 作为 UMESH0492 cmets,您还应该在 JSON 中命名您的列表:

{
"profile": [
    {
        "AttendanceDate":null,
        "AttendanceStatus":1,
        "AttendanceStatusDescription":null,
        "CompanyId":48,
        "Email":"",
        "FirstName":"Sindri",
        "Gender":1,
        "Gsm":"",
        "Id":259,
        "LastName":"yeh",
        "MiddleName":"",
        "Role":0,"UserId":"corp\\marg"
    },{
        "AttendanceDate":null,
        "AttendanceStatus":1,
        "AttendanceStatusDescription":null,
        "CompanyId":48,
        "Email":"",
        "FirstName":"David",
        "Gender":1,
        "Gsm":"",
        "Id":165,
        "LastName":"Guðmundsson",
        "MiddleName":"",
        "Role":0,"UserId":"corp\\marg"
    }
]
}

【讨论】:

  • 感谢您的回答.. 我试过这个并且它给了我一个错误---->com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT 但在第 1 行是 BEGIN_ARRAY第 2 列路径 $
  • 抱歉,我错过了开头的 { 和结尾的 }。更新了答案!
  • 是的,如果它以 { } 开头但它出现在 [ ] 中是正确的
  • 嗯,好的。如果您无法更改 JSON 的格式,那么我相信您将不得不像在此答案中那样实现反序列化器:stackoverflow.com/questions/29169640/…
猜你喜欢
  • 2020-07-31
  • 2021-05-11
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多