当我向 Parse 提交新帖子时应用程序崩溃

App crash when I submit a new post to Parse

这是我的应用程序崩溃的唯一地方,也是更重要的功能之一

LogCat告诉我:

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

我尝试了 ParseObject.create() 但这只会导致更多问题(我可能做错了)。我应该如何编码?

这是我的 newPost 类:

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();
                    }
                }

            });

        }
    });



}

替换此行

ParseObject post = new ParseObject("Posts");

有了这个

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

在我的例子中,我不得不删除模型中的“@ParseClassName”注释 class。我的理解是,如果我有一个解析模型 class 'Posts' 并且我在应用程序中调用 'registerSubclass(yourclassname)',那么我只需要

Post obj = new Post();

您可能在 Application class 中初始化 Parse 时犯了一个错误。或者忘记将 android:name=".YourApplicationClass" 放入您的清单文件中。

确保您已在 Application.java class 初始化 Parse 的地方添加以下行

ParseObject.registerSubclass(Message.class);

我收到此错误是因为我忘记在我的应用程序扩展中将我的解析 class 注册为子class:

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();
    }
}