2015-11-11 3 views
0

В настоящее время я использую Retrofit 1.9.0 для своего Android-приложения. Я разработал службу REST. Чтобы получить данные из REST, я выполнил следующий код. Я хотел бы получить список сотрудников на основе строки ID с сервера.Зачем восстанавливать результаты после второго раза?

if(!ids.isEmpty()) { 
    retrofitService.getNewStaffInfo(ids, new Callback<List<StaffInfo>>() { 
       @Override 
       public void success(List<StaffInfo> staffInfos, Response response) { 
        System.out.println(staffInfos.size()); 
        for (StaffInfo staff : staffInfos) 
         mStaffInfo.add(staff); 
        // update the local database 
       } 
       @Override 
       public void failure(RetrofitError error) { 
        System.out.println("error"); 
       } 
      } 
    ); 
} 
System.out.println(mStaffInfo.size()); 

Однако моя проблема в том, что я получаю результат два раза. В первый раз размер списка результатов равен нулю, но во второй раз я получаю правильный результат, который не равен нулю.

Я был бы признателен, если у кого-нибудь есть решение, почему размер результата списка равен нулю в первый раз?

ответ

0

При использовании обратного вызова код в обратном вызове не запускается до тех пор, пока сетевой запрос не будет завершен. Тем временем ваша программа продолжает запускать код. В вашем случае вы запустите вызов, и прежде чем он будет сделан, попробуйте распечатать размер вашего списка. Затем, когда вызов завершается, вы снова печатаете размер списка. Я аннотировал проблемную строку ниже. При удалении будет напечатан только правильный размер.

if(!ids.isEmpty()) { 
    retrofitService.getNewStaffInfo(ids, new Callback<List<StaffInfo>>() { 
       @Override 
       public void success(List<StaffInfo> staffInfos, Response response) { 
        System.out.println(staffInfos.size()); 
        for (StaffInfo staff : staffInfos) 
         mStaffInfo.add(staff); 
        // update the local database 
       } 
       @Override 
       public void failure(RetrofitError error) { 
        System.out.println("error"); 
       } 
      } 
    ); 
} 
System.out.println(mStaffInfo.size()); <---- *** This line runs before the call back and prints out the zero size. Remove it. 
Смежные вопросы