Jarrod Barfield
Jarrod Barfield

Reputation: 105

App crash when I submit a new post to Parse

This is the only Place my app crashes and one of the more important features

The LogCat tells me:

java.lang.IllegalArgumentException: You must create this type of ParseObject using ParseObject.create() or the proper subclass. at line 37.

I tried the ParseObject.create() however that just caused more problems (I may have done it incorrectly). How Should I code this?

Here is my newPost class:

public class newPost extends Activity {

private Button addButton;

private TextView postView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newpost);

    postView = ((EditText) findViewById(R.id.postView));

    addButton = ((Button) findViewById(R.id.addButton));
    addButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            //line 37 Below
            ParseObject post = new ParseObject("Posts");
            post.put("content", postView);
            post.saveInBackground(new SaveCallback () {

                @Override
                public void done(ParseException e) {
                    if (e == null) {
                        setResult(RESULT_OK);
                        finish();
                    } else {
                        Toast.makeText(getApplicationContext(),
                                "Error saving: " + e.getMessage(),
                                Toast.LENGTH_SHORT)
                                .show();
                    }
                }

            });

        }
    });



}

Upvotes: 4

Views: 2805

Answers (5)

Jonathan Dunn
Jonathan Dunn

Reputation: 289

I got this error because I forgot to register my parse class as a subclass in my application extension:

public class App extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();

        App application = this;

        ParseObject.registerSubclass(Posts.class); // <-- This is what you need

        Parse.enableLocalDatastore(this);
        Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
                                 .applicationId(EnvironmentConfig.appID)
                                 .server(EnvironmentConfig.serverName)
                                 .enableLocalDataStore()
                                 .build());

        ParseInstallation.getCurrentInstallation().saveInBackground();
    }
}

Upvotes: 0

AnupamChugh
AnupamChugh

Reputation: 1899

Ensure that you've added the below line in the Application.java class where Parse is initialised

ParseObject.registerSubclass(Message.class);

Upvotes: 3

Loolooii
Loolooii

Reputation: 9162

You probably made a mistake in initialising Parse in your Application class. Or forgot to put android:name=".YourApplicationClass" in your Manifest file.

Upvotes: 1

chrisbiz155
chrisbiz155

Reputation: 41

In my case I had to remove the '@ParseClassName' annotation in my model class. My understanding is that if I have a parse model class 'Posts' and I call 'registerSubclass(yourclassname)' in Application, then all I need is

Post obj = new Post();

Upvotes: 3

Greg Ennis
Greg Ennis

Reputation: 15379

Replace this line

ParseObject post = new ParseObject("Posts");

with this

ParseObject post = ParseObject.create("Posts");

Upvotes: 5

Related Questions