【问题标题】:Parse crash on creating user创建用户时解析崩溃
【发布时间】:2015-06-16 20:02:14
【问题描述】:

我使用 Parse 作为我的 Android 应用程序的后端。当我尝试创建用户对象时,我只有一些 android 设备的崩溃报告。崩溃的错误是:

Caused by: java.lang.IllegalArgumentException: 
You must register this ParseObject subclass before instantiating it.
at com.parse.ParseObject.<init>(ParseObject.java:184)

提交崩溃报告的设备有:

HTC Desire 510 (htc_a11ul)  2   33.3% Android 4.4
Xperia E3 (D2203)   1   16.7%  Android 4.4
Galaxy S4 (jflte)   1   16.7%  Android 4.4
Galaxy S5 (klte)    1   16.7%  Android 4.4

这非常奇怪,因为我目前已经在三星 Note 4、Galaxy S4、S5 和 Nexus 5 上测试了我的代码,没有任何问题。我不确定为什么 Parse 会突然要求我进行子类化,因为我没有尝试使用 Parse 提供的子类功能。同样,我已经在其他设备上测试了此代码,没有任何问题。

谁能告诉我如何解决这个问题?我在下面添加了创建用户的代码,它崩溃了。

谢谢!

    Parse.initialize(this, "XXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXX");
    ParseUser user = new ParseUser();
    user.setUsername(email);
    user.setPassword(confirmPassword);
    user.setEmail(email);
    user.put("deviceID", deviceID);
    user.put("name", fullName);

    progress = new ProgressDialog(Register.this);
    progress.setMessage("Creating Account... Please Wait");
    progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progress.setIndeterminate(true);
    progress.setCanceledOnTouchOutside(false);
    progress.setCancelable(false);
    progress.show();


    user.signUpInBackground(new SignUpCallback() {
        public void done(ParseException e) {
            if (e == null) {
                // Hooray! Let them use the app now.
                Intent i = new Intent(Register.this, DeviceSettingsIntro.class);
                startActivity(i);
                progress.hide();
                btnRegister.setEnabled(true);
            } else {
                // Sign up didn't succeed. Look at the ParseException
                // to figure out what went wrong
                progress.hide();
                checkParseError(e);
                btnRegister.setEnabled(true);
            }
        }
    });

【问题讨论】:

  • 疯狂猜测。一些网络环境引入了一个异步问题,其中 init 不返回,并且以下表达式以某种方式尝试获取新的 parse_user OBJ。这会导致错误消息..也许尝试/捕获超时或其他东西......
  • @RobertRowntree 您好罗伯特,谢谢您的回复。我添加了更多代码,展示了我如何将 User 对象实际发送到 Parse。就您的建议而言,情况并非如此,因为它应该根据我的代码捕获错误……对吗?再次感谢您
  • 你有扩展 ParseObject 或 ParseUser 的类吗?
  • @YeahIO 不,我没有。甚至进行了完整的项目搜索。我启动 ParseObject 和 ParseUser 但我没有扩展它的类。还有其他想法吗?谢谢!
  • 在您的源代码中,您确实在注册前初始化 Parse。尝试在 Application 的 onCreate() 方法中初始化 Parse 并告诉我。我之前遇到过同样的错误,这解决了我的崩溃问题。

标签: java android mobile parse-platform


【解决方案1】:

您是否尝试过使用Application 类初始化Parse,如Parse 快​​速入门指南所述?可能Parse没有初始化成功

创建一个扩展应用程序的类,并为内容:

@Override
public void onCreate() {
    super.onCreate();

    Parse.enableLocalDatastore(this); //might not be needed
    Parse.initialize(this, "xxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxx");
}

编辑你的清单 标签,添加:

    android:name="com.yourpackage.applicationclass"

//so it should look like (for example) : 
<application
    android:name="com.yourpackage.yourapplicationclass"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    //put activities here

</application>

这样,Parse 将始终在您的应用程序启动时被初始化,而不管 Activity。

【讨论】:

  • 嗨里德,感谢您的回复。是的,我已经这样做了,我认为这不是问题,因为我们拥有的许多设备和用户都可以正常工作。这只是一些设备。并且错误并不是说 parse 没有正确初始化,而是说我没有正确地继承 parse 对象(在 parse Android 指南中提到),这根本不是我想要做的。还有其他建议吗?谢谢!
  • 您能否尝试捕获您实例化 ParseUser 的部分,然后按照文档 parse.com/docs/android/api/com/parse/ParseException.html 中的说明检查 ParseException 是否有任何错误代码
  • 您使用的是什么版本的 Parse lib 和 com.parse.bolts?
【解决方案2】:

您可以在调用 Parse.initialize() 之前尝试注册 ParseUser 类,如下所示:

ParseObject.registerSubclass(ParseUser.class);
Parse.initialize();

我知道您不需要这样做,但可能可以解决您的问题。 您可以测试并发布结果!

否则,您可以随时向解析团队寻求更多信息。

【讨论】:

  • 您好克莱顿,感谢您的回复。我对为什么需要这样做感到困惑,因为我没有对任何 Parse 对象进行子类化,并且文档说子类化是可选的。我只使用“内置”解析用户类。同样,崩溃仅发生在上面提到的某些 Android 设备上。如果确实需要这样做,为什么不在每台设备上都崩溃?谢谢!
  • 嗨@Teddy13,你是对的!子类化是可选的,您不需要更改代码。但是您是否尝试在您的 Application 类中注册 ParseUser 类?它可能值得一试;)
  • 您也可以在这里提交错误报告或搜索更多信息:developers.facebook.com/bugs/custom/?tag_ids=756081267746393
  • @Teddy13,我编辑了我的答案,你能测试一下这个工作吗?
【解决方案3】:

您已将这两个命令添加到清单中?:

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多