在改造外部打印时其值为空的数组列表

时间:2019-01-30 10:46:10

标签: java android retrofit2

为什么我的数组列表的值为空?当它在改造之外打印时,即使我已经声明了公共变量List<Profile> profileList = new ArrayList<Profile>();

我想要在改造之外打印值arraylist,但是没有用。当在改造中打印出值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());
    }

改造界面

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

3 个答案:

答案 0 :(得分:2)

您必须在响应方法内检查数据 (在此处发表评论),因为加载响应需要一些时间,并且有时下一条之前运行响应将可用。

答案 1 :(得分:2)

@Deepanshu是正确的。从服务器获取数据可能会有些延迟。

因此,您可以添加一个listener,该代码将在填充要打印列表的代码后触发(如果打印代码将在另一个类中),或者在同一个类中调用另一个方法。 / p>

示例代码

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();
}

答案 2 :(得分:0)

您正在读取profileList,然后再填充它。