java - 如何以用户身份在 Parse 上存储和加载 session ?

标签 java android session parse-platform

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

至于创建 session 并将其上传到 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 上非常相似的代码可以很好地处理“ session ”关系。我犯了什么错误?

UPD。我注意到,只有当我已经准备好使用 addNewSession() 发送一些自定义创建的 session 到 Parse,然后尝试使用 getSessions() 获取它们时,才会出现此异常。也许创建和发送 session 是问题所在?

最佳答案

我找到了解决方案。在我将新创建的 session 添加到用户关系之后

ParseRelation<ParseSession> relation = ParseUser.getCurrentUser().getRelation("sessions");
relation.add(session);

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

关于java - 如何以用户身份在 Parse 上存储和加载 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035656/

相关文章:

php - session_start() 在发送输出后工作

java - 将值应用于对象时出错

java - 在 Android App 中使用 jBCrypt 加盐密码会导致长时间挂起

java - Java 中的 I/O 操作优化?

android - Codename One 中的按钮在 Android 实际设备上处于非 Activity 状态,但在模拟器下工作

android - 如何使用 imeactionId 的值

java - 使用 Maven 在 IntelliJ 中构建时解决 PermGen 错误?

android - 在没有 WLClient::connect() 的情况下接收 GCM 推送

asp.net - Windows Azure 和 ASP.NET session

angular - 如何在 Angular 中生成服务器端 session 变量?