我不明白Parse是如何工作的? 我将数据下载解析到我的arraylist,但当我在(// here)方法中显示Pets.size时,它将显示4,但是当我在done方法之外显示pets.size时它会显示0?
public class Test extends AppCompatActivity {
ArrayList<Pet> pets;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
pets = new ArrayList<>();
ParseQuery<Pet> query = new ParseQuery<>("Pets");
query.findInBackground(new FindCallback<Pet>() {
@Override
public void done(List<Pet> list, ParseException e) {
if (e!=null){
Toast.makeText(Test.this,"Error",Toast.LENGTH_LONG).show();
}
for (Pet pet : list){
Pet newPet = new Pet();
newPet.setName(pet.getName());
newPet.setType(pet.getType());
pets.add(newPet);
}
// here
}
});
Toast.makeText(Test.this,"You have "+pets.size()+" pets",Toast.LENGTH_LONG).show();
}
这是我的Pet课程:
@ParseClassName("Pets")
public class Pet extends ParseObject {
public String getName(){
return getString("name");
}
public void setName(String name) {
put("name", name);
}
public String getType(){
return getString("type");
}
public void setType(String type) {
put("type", type);
}
}
还有一个问题,如果我想将数据保存在本地数据中该怎么办?
答案 0 :(得分:0)
只需调用pet.pin()或pet.pinInBackground();你可以将parseObject保存在本地存储中,查询你需要设置的本地存储中的对象query.fromPin(true) https://parse.com/docs/android/guide#objects-the-local-datastore
答案 1 :(得分:0)
说明:
findInbackground执行一个操作来查找后台线程中的所有ParseObjects(在主线程或UI线程之外)。所以当它在你有评论的地方完成时
//这里
这是后台线程完成调用以查找对象的时候。当你试图在那个显示大小为0的调用之外查看数组的大小时,这是因为它在后台线程完成它的工作之前到达了那个点(从它找到的对象添加到你的数组)。
正在发生的事情是find()的操作与主线程代码并行发生。
对于第二个问题,请确保启用了LocalDatastore,然后您可以将查询结果固定到本地缓存。此数据存储在设备上,直到用户删除您的应用或清除设置中的缓存数据。
按照本指南设置本地缓存Local Datastore with Parse
注意:在查找宠物的后台任务完成时解决问题的方法是从Callback中调用一个方法来调用findInBackground,该调用将处理新发现的Pet ParseObjects。还记得通过查找没有对象或连接/超时中的某些失败来处理查询失败。
答案 2 :(得分:0)
“完成”方法在后台任务结束时触发。