如何在Parse上以用户身份存储和加载我的会话?

时间:2016-01-27 11:09:20

标签: java android session parse-platform

我目前正在为现有的IOS应用开发Android应用,因此使用Session对象在Parse上存储一些数据对我来说至关重要。

至于创建和上传Parse会话我没有问题。

public static void syncUser() {
    ParseUser.getCurrentUser().fetchInBackground(new GetCallback<ParseObject>() {
        @Override
        public void done(ParseObject object, ParseException e) {
            if (e != null) {
                Log.d("", "SYNC ERROR");
                e.printStackTrace();
            }

            if (object != null) {
                syncSessions();
            }
        }
    });
}

private static void syncSessions() {
    ParseQuery<ParseSession> query = ParseQuery.getQuery(ParseSession.class);
    query.fromLocalDatastore();
    query.findInBackground(new FindCallback<ParseSession>() {
        @Override
        public void done(List<ParseSession> objects, ParseException e) {
            for (ParseSession session : objects) {
                fetchSession(session, null);
            }
        }
    });
}

public static void fetchSession(final ParseSession session, final OnResultCallback cb) {
    session.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e != null) {
                if (cb != null)
                    cb.onResult(false);
                e.printStackTrace();
            } else {
                if (cb != null)
                    cb.onResult(true);
                ParseRelation<ParseSession> relation = ParseUser.getCurrentUser().getRelation("sessions");
                relation.add(session);
                syncUser();
            }
        }
    });
}

public static void addNewSession(Date date, String link, int successValue) {
    final ParseSession session = new ParseSession();
    session.put("date", date);
    session.put("link", link);
    session.put("successValue", successValue);
    session.pinInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e != null)
                e.printStackTrace();
            else {
                fetchSession(session, new ParseManager.OnResultCallback() {
                    @Override
                    public void onResult(boolean success) {
                        if (success) {
                            try {
                                session.unpin();
                            } catch (ParseException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });
            }
        }
    });
}

public interface OnResultCallback {
    void onResult(boolean success);
}

为了使用我的参数创建新的Session并上传它我使用addNewSession()方法,它正确显示在Parse仪表板中,它们有我的字段列(日期,链接,successValue),并存储为默认的Session对象。

但是当我尝试将它们从Parse加载到我的客户端时,它不起作用。我用这种方法加载它们:

public static void getSessions(final OnResultCallback cb) {
    ParseRelation<ParseSession> relation = ParseUser.getCurrentUser().getRelation("sessions");
    ParseQuery<ParseSession> query = relation.getQuery();
    query.setLimit(1000);
    query.findInBackground(new FindCallback<ParseSession>() {
        @Override
        public void done(List<ParseSession> objects, ParseException e) {
            if (e != null) {
                e.printStackTrace();
                if (cb != null)
                    cb.onResult(false);
            } else {
                cb.onResult(true);
            }
            //if (objects != null)
            //USE SESSIONS
        }
    });
}

我抓住了一个例外:

W/System.err: com.parse.ParseRequest$ParseRequestException: wrong type of relation.  Expecting: , but received: _Session
W/System.err:     at com.parse.ParseRequest.newPermanentException(ParseRequest.java:270)

IOS上的类似代码与&#34;会话&#34;关系。我犯了什么错误?

UPD。我注意到只有当我已经使用addNewSession()将一些自定义创建的Session发送到Parse然后尝试使用getSessions()来获取它们时,我才会得到此异常。也许创建和发送会话是个问题?

1 个答案:

答案 0 :(得分:0)

我找到了溶剂。在我用

添加新创建的Session与User关系之后
ParseRelation<ParseSession> relation = ParseUser.getCurrentUser().getRelation("sessions");
relation.add(session);

我试图用fetchInBackground保存它们,这是一个错误。我将syncUser()更改为ParseUser.getCurrentUser()。saveInBackground(),一切正常。