无法将解析查询的结果保存在android变量中

无法将解析查询的结果保存在android变量中,android,parse-platform,Android,Parse Platform,我目前正在为android应用程序使用Parse.com的API。我想从parse中检索一个数组,并将其保存为一个列表,以便以后使用。但问题是当我离开查询时,我的列表变成空的。你能帮我吗 ParseUser currentUser=ParseUser.getCurrentUser(); 字符串userId=currentUser.getObjectId(); final ParseQuery pQuery=ParseQuery.getQuery(“友谊”); pQuery.whereEqual

我目前正在为android应用程序使用Parse.com的API。我想从parse中检索一个数组,并将其保存为一个列表,以便以后使用。但问题是当我离开查询时,我的列表变成空的。你能帮我吗

ParseUser currentUser=ParseUser.getCurrentUser();
字符串userId=currentUser.getObjectId();
final ParseQuery pQuery=ParseQuery.getQuery(“友谊”);
pQuery.whereEqualTo(“用户”,userId);
pQuery.findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表,异常解析){
如果(e==null){
如果(list.size()>0){
ParseObject p=list.get(0);
if(p.getList(“friendsList”)!=null){
list11=p.getList(“friendsList”);
Toast.makeText(getActivity().getApplicationContext(),
“发布成功”+list11.get(2.toString(),
Toast.LENGTH_LONG).show();
}
}
}
}
});
Toast.makeText(getActivity().getApplicationContext(),
“发布成功”+list11.get(1.toString(),

Toast.LENGTH_LONG).show()您只能在“完成”方法中放入第二个吐司,如下所示:-

   @Override
        public void done(List<ParseObject> list, ParseException e) {
            if (e==null) {
                if (list.size()>0) {
                    ParseObject p = list.get(0);
                    if (p.getList("friendsList")!=null) {
                        list11 =  p.getList("friendsList");
                        Toast.makeText(getActivity().getApplicationContext(),
                                "Posted With Success  "+ list11.get(2).toString(),
                                Toast.LENGTH_LONG).show();
                        Toast.makeText(getActivity().getApplicationContext(),
                                "Posted With Success  "+list11.get(1).toString(),
                                Toast.LENGTH_LONG).show();

                    }
                }
            }
        }
@覆盖
公共作废完成(列表,异常解析){
如果(e==null){
如果(list.size()>0){
ParseObject p=list.get(0);
if(p.getList(“friendsList”)!=null){
list11=p.getList(“friendsList”);
Toast.makeText(getActivity().getApplicationContext(),
“发布成功”+list11.get(2.toString(),
Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getApplicationContext(),
“发布成功”+list11.get(1.toString(),
Toast.LENGTH_LONG).show();
}
}
}
}

因为findInBackground方法会启动一个新的后台线程。当您显示第二个toast时,list11可能为空。因此,它抛出一个NullPointerException

是否将列表返回到活动上的方法?从外观上看,它现在是一个局部变量。实际上我使用的是一个片段,我已经将list11定义为一个全局变量,然后我尝试用查询结果填充它。我没有成功:(我尝试将这段代码放在每个地方(在创建方法上,在RemoteDataTask上…)List list11=new ArrayList();那么可能是您的数据,您正在调用数组的第二个位置,但它保证被填充吗?我调用它只是为了保证信息在这里。我要做的是检索我朋友的objectId列表。然后,我将尝试将他们的相对数据从User类提取到一个更符合负载的listviewhod。这里的问题是,我必须在片段中多次执行此查询。疯狂的想法,因为它是一个全局变量,您可能会意外地在某个地方替换数组?无论如何,您不应该使用非静态+最终全局变量,它们非常不稳定,因为所有内容都会修改它们。您的意思是list11在t之后不会丢失数据他询问,问题被这个关于线程的故事解决了!好吧,谢谢,我将尝试重用列表11并告诉你结果