从Parse.com加载数据并保存在本地数据中

时间:2015-10-05 22:40:32

标签: android parse-platform

我不明白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);
}
}

还有一个问题,如果我想将数据保存在本地数据中该怎么办?

3 个答案:

答案 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)

“完成”方法在后台任务结束时触发。