2016-05-30 41 views
1

我有下表中Back4App(解析)Android的解析指針返回空數據

匹配:ID(字符串),MAXPLAYERS(智力),運動(的parseObject)

問題是,當我嘗試有時會得到所有的匹配對象(我不知道爲什麼有時候會跑,其他人不會跑)我得到的運動分析對象沒有數據。其他時間,正如我所說的,我認爲對象是正確的。這裏是代碼:

public String saveMatch(Match match) throws ParseException { 

    ParseObject parseObject = new ParseObject("match"); 

    parseObject.put(COLUMN_MAX_PLAYERS, match.getMaxPlayer()); 

    //ParseObject sport = new ParseObject("Sport"); 
    //sport.setObjectId(match.getSport().getId()); 
    //parseObject.put("sport", sport); 

    //I change to the next code but the problem continue. 
    ParseObject sport = ParseObject.createWithoutData(TableSport.TABLE_NAME,match.getSport().getId()); 
    parseObject.put(COLUMN_SPORT, sport); 

    parseObject.save(); 

    return parseObject.getObjectId(); 

} 

@Override 
public ArrayList<Match> getAllMatches() throws ParseException, ParseObjectException { 

    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME); 
    List<ParseObject> objects = query.find(); 

    return parseAllObjectsToMatchList(objects); 
} 

private ArrayList<Match> parseAllObjectsToMatchList(List<ParseObject> objects) throws ParseException, ParseObjectException { 

    ArrayList<Match> matches = new ArrayList<>(); 
    for (int i = 0; i < objects.size(); i++){ 
     matches.add(parseObjectToMatch(objects.get(i))); 
    } 
    return matches; 
} 

private Match parseObjectToMatch(ParseObject object) throws ParseException, ParseObjectException { 

    try{ 
     Match match = new Match(); 

     match.setId(object.getObjectId()); 
     match.setMaxPlayer(object.getInt(COLUMN_MAX_PLAYERS)); 

     ParseObject objectSport = object.getParseObject(COLUMN_SPORT); 
     if(objectSport!= null){ 
      Sport sport = (sportDatabaseManager.parseObjectToSport(objectSport)); 
      match.setSport(sport); 
     } 

     return match; 

    }catch (Exception e){ 
     throw new ParseObjectException(); 
    } 
} 

private Sport parseObjectToSport(ParseObject parseObject) throws ParseObjectException { 

    try{ 
     ParseFile parseFile = parseObject.getParseFile(TableSport.COLUMN_IMAGE); 

     Sport sport = new Sport(); 
     sport.setId(parseObject.getObjectId()); 
     sport.setName(parseObject.getString(TableSport.COLUMN_NAME)); 
     sport.setSumary(parseObject.getString(TableSport.COLUMN_SUMARY)); 
     sport.setDescription(parseObject.getString(TableSport.COLUMN_DESCRIPTION)); 
     sport.setImage(parseFile.getUrl()); 

     return sport; 
    }catch (Exception e){ 
     throw new ParseObjectException(); 
    } 
} 

回答

1

使用 '包括' 來獲取相關數據

@Override 
public ArrayList<Match> getAllMatches() throws ParseException, ParseObjectException { 

    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME); 
    query.include(COLUMN_SPORT); 
    List<ParseObject> objects = query.find(); 

    return parseAllObjectsToMatchList(objects); 
} 

https://parse.com/docs/android/guide#queries-relational-queries https://parse.com/docs/android/api/com/parse/ParseQuery.html#include(java.lang.String)

0

我找到了解決方案,如果有人需要它。

問題是指針對象需要一段時間才能獲取,所以我需要調用parseObject.fetchIfNeeded()。

+0

fetchIfNeeded()返回的對象,但它是空的。沒有估計的數據。有沒有解決方案 – Charu