为什么我的数组列表的值为空?当它在改造之外打印时,即使我已经声明了公共变量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);
答案 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,然后再填充它。