Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList大小在循环外为零_Java_Android_Arraylist - Fatal编程技术网

Java ArrayList大小在循环外为零

Java ArrayList大小在循环外为零,java,android,arraylist,Java,Android,Arraylist,我正在使用ParseObject获取一些数据,循环中的每件事情都很好,但在循环之外,列表似乎将被删除,并且大小为零,我对此感到好奇!请帮帮我 public class frag1 extends Fragment { public frag1() { // Required empty public constructor } String TAG="val"; public static ArrayList<getData> data; @Override publ

我正在使用ParseObject获取一些数据,循环中的每件事情都很好,但在循环之外,列表似乎将被删除,并且大小为零,我对此感到好奇!请帮帮我

public class frag1 extends Fragment {


public frag1() {
    // Required empty public constructor
}

String TAG="val";
public static ArrayList<getData> data;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v=inflater.inflate(R.layout.fragment_frag1, container, false);
    data=new ArrayList<getData>();

    ListView list=(ListView)v.findViewById(R.id.list);
    list.setAdapter(new listAdapter());

    ParseQuery<ParseObject> query = ParseQuery.getQuery("mPlayDataBase");
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> obj, ParseException e) {

            if (e == null) {
                for(ParseObject po:obj){

                    String st1=(String) po.getString("name");
                    String st2=(String) po.getString("family");
                    String st3=(String) po.getString("phone");

                    data.add(new getData(st1,st2,st3));
                    Log.v(TAG,"size "+ data.size());//the size here is 3 and this is right
                }

            } else {
                Log.v(TAG,"WRONG VALUE");

            }
        }
    });


    Log.v(TAG,"size2  "+ data.size());//the problem is here,size is 0


    return v;
公共类frag1扩展片段{
公共框架1(){
//必需的空公共构造函数
}
String TAG=“val”;
公共静态数组列表数据;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment_frag1,容器,假);
数据=新的ArrayList();
ListView列表=(ListView)v.findViewById(R.id.list);
setAdapter(新的listAdapter());
ParseQuery=ParseQuery.getQuery(“mPlayDataBase”);
findInBackground(新的FindCallback(){
公共作废完成(列表对象,异常解析){
如果(e==null){
用于(解析对象po:obj){
字符串st1=(String)po.getString(“名称”);
字符串st2=(String)po.getString(“系列”);
String st3=(String)po.getString(“电话”);
添加(新的getData(st1、st2、st3));
Log.v(标记,“size”+data.size());//这里的大小是3,这是正确的
}
}否则{
Log.v(标签“错误值”);
}
}
});
Log.v(标记“size2”+data.size());//问题在这里,大小是0
返回v;

问题在于
query.findInBackground()
异步执行代码,因此它将触发调用,而无需等待抓取完成,然后直接继续执行此行

Log.v(标记“size2”+data.size());//问题就在这里,大小是0

然后,当抓取完成时,调用
done()
,然后您可以看到它有3个元素,

那么如何解决这个问题呢?

将代码移动到
done()
或将其放入函数中,然后在
done()中调用该函数


希望这有帮助!

如果我们在for循环的parse query中添加元素,我们如何访问该arraylist之外的内容?