繁体   English   中英

ParseException:“您必须在实例化此ParseObject子类之前注册它。”

[英]ParseException: “You must register this ParseObject subclass before instantiating it.”

我在Android Studio中,与Parse.com一起Parse.com并且在运行此代码时:

public void onClick(View v) {
    Log.i(TAG, "Like-button clicked");
    ParseUser currentUser = ParseUser.getCurrentUser();
    Activity likes = new Activity();
    likes.setToUser(photo.getUser());
    likes.setFromUser(currentUser);
    likes.setType("like");
    likes.setPhoto(photo);
    ParseACL acl = new ParseACL(currentUser);
    acl.setPublicReadAccess(true);
    likes.setACL(acl);
    likes.saveInBackground(new SaveCallback() {
        public void done(ParseException e) {
            //....

它在Activity likes = new Activity();行崩溃Activity likes = new Activity(); ,并表示为ParseException: "You must register this ParseObject subclass before instantiating it."

我的课堂Activity如下所示:

package com.parse.myApp

import com.parse.ParseClassName;
import com.parse.ParseFile;
import com.parse.ParseObject;
import com.parse.ParseUser;

/*
 * An extension of ParseObject that makes
 * it more convenient to access information
 * about a given Photo 
 */

@ParseClassName("Activity")
public class Activity extends ParseObject {

    public Activity() {
        // A default constructor is required.
    }

    public ParseUser getFromUser(){
        return getParseUser("fromUser");
    }

    public void setFromUser(ParseUser user){
        put("fromUser", user);
    }

    public ParseUser getToUser(){
        return getParseUser("toUser");
    }

    public void setToUser(ParseUser user){
        put("toUser", user);
    }

    public String getType(){
        return getString("type");
    }

    public void setType(String t){
        put("type", t);
    }

    public String getContent(){
        return getString("content");
    }

    public void setContent(String c){
        put("content", c);
    }

    public ParseFile getPhoto(){
        return getParseFile("photo");
    }

    public void setPhoto(ParseFile pf){
        put("photo", pf);
    }
}

而且我已经在ApplicationClass设置了:

package com.parse.myApp;

import android.app.Application;

import com.parse.Parse;

import com.parse.ParseACL;

import com.parse.ParseFacebookUtils;

import com.parse.ParseInstallation;

import com.parse.ParseObject;

import com.parse.PushService;

public class AnypicApplication extends Application {
static final String TAG = "Panagram";

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

    /*
     * In this tutorial, we'll subclass ParseObjects for convenience to
     * create and modify Photo objects.
     * 
     * Also, we'll use an Activity class to keep track of the relationships
     * of ParseUsers with each other and Photos. Every time a user follows, likes 
     * or comments, a new activity is created to represent the relationship.
     */
    ParseObject.registerSubclass(Photo.class);
    ParseObject.registerSubclass(Activity.class);
    /*
     * Fill in this section with your Parse credentials
     */
    Parse.initialize(this, "myKey", "myKey");

    // Set your Facebook App Id in strings.xml
    ParseFacebookUtils.initialize("373432736168885");


    /*
     * For more information on app security and Parse ACL:
     * https://www.parse.com/docs/android_guide#security-recommendations
     */
    ParseACL defaultACL = new ParseACL();

    /*
     * If you would like all objects to be private by default, remove this
     * line
     */
    defaultACL.setPublicReadAccess(true);

    /*
     * Default ACL is public read access, and user read/write access
     */
    ParseACL.setDefaultACL(defaultACL, true);

    /*
     *  Register for push notifications.
     */
    PushService.setDefaultPushCallback(this, LoginActivity.class);
    ParseInstallation.getCurrentInstallation().saveInBackground();
}

}

我的Manifest.xml看起来像这样:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.parse.anypic"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="com.parse.anypic.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.parse.anypic.permission.C2D_MESSAGE" />

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

    <application
        android:name=".AnypicApplication"
        android:allowBackup="true"
        android:icon="@drawable/anypic_icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".HomeListActivity"
            android:label="@string/title_activity_home_list" >

            <!-- <meta-data -->
            <!-- android:name="android.support.PARENT_ACTIVITY" -->
            <!-- android:value="android.app.Activity" /> -->
        </activity>
        <activity
            android:name=".NewPhotoActivity"
            android:label="@string/title_activity_new_photo" >
        </activity>
        <activity
            android:name=".LoginActivity"
            android:label="@string/title_activity_login" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.facebook.LoginActivity"
            android:label="@string/app_name" >
        </activity>

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/app_id" />

        <service android:name="com.parse.PushService" />

        <receiver android:name="com.parse.ParseBroadcastReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.parse.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <!-- IMPORTANT: Change "com.parse.starter" to match your app's package name. -->
                <category android:name="com.parse.anypic" />
            </intent-filter>
        </receiver>

        <activity
            android:name=".RegisterAcitivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_register_acitivity"
            android:theme="@style/FullscreenTheme" >
        </activity>
    </application>

</manifest>

即使我已经设置了registerSubclass,我每次都会得到相同的错误。

我的问题是我有两个Activity类,但确实做到了: ParseObject.registerSubclass(Activity.class); ,但android不知道它是哪个Activity类。 所以我删除了其中一个,问题就解决了。

我的问题是我有两个Activity类,但确实做到了: ParseObject.registerSubclass(Activity.class); ,但android不知道它是哪个Activity类。 所以我删除了其中一个,问题就解决了。

我建议您将Activity类重命名为ActivityParse ,以确保您注册了正确的类。

请确保您在AndroidManifest使用了ApplicationClass并在onCreate方法中调用了初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM