список массивов, значение которого пусто при печати за пределами модернизации - PullRequest
0 голосов
/ 30 января 2019

почему мой список массивов, значение которого пусто?когда он печатается вне модификации, даже я уже объявляю публичную переменную List<Profile> profileList = new ArrayList<Profile>();

Я хочу, чтобы печатный массив значений находился вне модификации, но не работал.когда печатается значение arraylist внутри дооснащения это работает.

это мой код

Hello.java

List<Profile> profileList = new ArrayList<Profile>();
apiService.getGetlistuser("getlistuser").enqueue(new Callback<ResponseDaftar>() {
        @Override
        public void onResponse(Call<ResponseDaftar> call, Response<ResponseDaftar> response) {
            if (response.isSuccessful()) {
                List<GetlistuserItem> getlistuserItemList = response.body().getGetlistuser();
                for (int i = 0; i < getlistuserItemList.size(); i++) {
                    profileList.add(new Profile(
                            getlistuserItemList.get(i).getUserID(),
                            getlistuserItemList.get(i).getNickname()
                    ));
                }

    /* 
      is working
      for (Profile p : profileList){
          Log.i("info", p.getUserid() + '\n' + p.getNickname());
      } 
    */


            }
        }

    });

    // my value is empty
    for (Profile p : profileList){
        Log.i("info", p.getUserid() + '\n' + p.getNickname());
    }

retrofitinterface

@POST("GetListNews.php")
    @FormUrlEncoded
    Call<ResponseDaftar> getGetlistuser(@Field("TableName") String paramTable);

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Вы читаете profileList до его заполнения.

0 голосов
/ 30 января 2019

@ Дипаншу прав.может быть некоторая задержка при получении данных с сервера.

Итак, вы можете добавить listener, который будет срабатывать после заполнения вашего кода для печати списка (если ваш код печати будет в другомкласс) или вызовите другой метод, если он находится в том же классе.

Пример кода

List<Profile> profileList = new ArrayList<Profile>();
public void getData(){
    final Listener listener = new Listener() {
        @Override
        public void onDataReceived() {
            //print command goes here
        }
    }
    apiService.getGetlistuser("getlistuser").enqueue(new Callback<ResponseDaftar>() {
        @Override
        public void onResponse(Call<ResponseDaftar> call, Response<ResponseDaftar> response) {
            if (response.isSuccessful()) {
                List<GetlistuserItem> getlistuserItemList = response.body().getGetlistuser();
                for (int i = 0; i < getlistuserItemList.size(); i++) {
                    profileList.add(new Profile(
                            getlistuserItemList.get(i).getUserID(),
                            getlistuserItemList.get(i).getNickname()
                    ));
                }
                printData(); //if it is in same class
                if(listener != null) 
                    listener.onDataReceived(); //if it is going to happen in another class
    /*
      is working
      for (Profile p : profileList){
          Log.i("info", p.getUserid() + '\n' + p.getNickname());
      }
    */


                }
            }

        });

    // my value is empty
    for (Profile p : profileList){
        Log.i("info", p.getUserid() + '\n' + p.getNickname());
    }
}

public void printData(){
    for (Profile p : profileList){
        Log.i("info", p.getUserid() + '\n' + p.getNickname());
    }
}

// this will be going to make in separate file 
interface Listener{
    void onDataReceived();
}
0 голосов
/ 30 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...