2015-10-05 77 views
1

我不明白Parse是如何工作的? 我將數據解析到我的數組列表中,但是當我在(//這裏)顯示的Pets.size方法「完成」時,它會顯示4,但是當我在done的方法之外顯示pets.size時,它將顯示0 ?從Parse.com加載數據並保存在本地數據中

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(); 
} 

這是我的寵物類:

@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); 
} 
} 

而一個orther問題,我應該怎麼做,如果我想保存本地數據的數據?

回答

0

說明:

findInbackground執行操作,以找到在後臺線程所有ParseObjects(外主線程或UI線程)。因此,當它完成了,你有註釋的地方

//這裏

也就是說,當後臺線程完成它的打電話找對象。當您嘗試查看調用之外數組的大小並顯示大小爲0時,這是因爲它在後臺線程完成它的工作(從找到的對象添加到您的數組)之前已達到該點。

發生什麼事是find()的操作正在與主線程代碼並行發生。

而對於第二個問題,請確保您啓用本地數據存儲,然後您可以將查詢結果固定到本地緩存。此數據存儲在設備上,直到用戶刪除您的應用或清除設置中的緩存數據。

按照本指南設置本地緩存Local Datastore with Parse

注:一個解決問題的方法爲當發現寵物的後臺任務完成是從回調中調用一個方法爲findInBackground呼叫將處理新發現的Pet ParseObjects。還要記住,如果查詢失敗,或者找不到對象或連接/超時失敗。

0

只是調用pet.pin()或pet.pinInBackground();您可以在本地存儲保存的parseObject,來查詢本地存儲的對象,你需要設置query.fromPin(真) https://parse.com/docs/android/guide#objects-the-local-datastore

+0

檢查查詢文檔https://parse.com/docs/android/guide#queries-basic-queries https://parse.com/docs/android/api/com/parse/ParseQuery.html – ingyesid

0

「完成」方法在後臺任務結束時觸發。

相關問題