请帮忙。我对 Android 开发和 Parse 非常陌生。我正在尝试创建一个对象列表。所以我创建了一个名为“listObject”的类,它扩展了“ParseObject”,并且我试图保存 listObjects。但当我尝试从 Android 模拟器添加对象时,出现此运行时错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746)
at com.parse.ParseObject.<init>(ParseObject.java:158)
at com.parse.ParseObject.<init>(ParseObject.java:121)
at com.parse.starter.listObject.<init>(listObject.java:10)
at com.parse.starter.CreateList.post(CreateList.java:75)
at com.parse.starter.CreateList.access$000(CreateList.java:29)
at com.parse.starter.CreateList$1.onClick(CreateList.java:59)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
这是我的代码:
public class CreateList extends Activity {
// UI references.
private EditText postEditBrand;
private EditText postEditProduct;
private EditText postEditPrice;
private TextView characterCountTextView;
private Button postButton;
private int maxCharacterCount = 200;
private ParseGeoPoint geoPoint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_list);
Intent intent = getIntent();
postEditBrand = (EditText) findViewById(R.id.enterBrand);
postEditProduct = (EditText) findViewById(R.id.enterProduct);
postButton = (Button) findViewById(R.id.post_button);
postButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
post();
}
});
}
private void post () {
String brand = postEditBrand.getText().toString().trim();
String product = postEditProduct.getText().toString().trim();
// Set up a progress dialog
final ProgressDialog dialog = new ProgressDialog(CreateList.this);
dialog.setMessage(getString(R.string.progress_post));
dialog.show();
// Create a post.
listObject post = new listObject();
post.setBrand(brand);
post.setProduct(product);
ParseACL acl = new ParseACL();
// Give public read access
acl.setPublicReadAccess(true);
post.setACL(acl);
// Save the post
post.saveInBackground(new SaveCallback() {
@Override
public void done(com.parse.ParseException e) {
dialog.dismiss();
finish();
}
});
}
}
public class listObject extends ParseObject {
public String getBrand() {
return getString("brand");
}
public void setBrand(String value) {
put("brand", value);
}
public String getProduct() {
return getString("product");
}
public void setProduct(String value) {
put("product", value);
}
public int getPrice() {
return getInt("price");
}
public void setPrice(Integer value) {
put("price", value);
}
public static ParseQuery<listObject> getQuery() {
return ParseQuery.getQuery(listObject.class);
}
}
最佳答案
您忘记了代码中的一些要点:
您必须在扩展 ParseObject 的 DAO 类中注释类名:
@ParseClassName("ListObject") //THIS
public class listObject extends ParseObject {
public String getBrand() {
return getString("brand");
}
您必须在初始化 Parse(应用程序类)之前添加您的类:
Call ParseObject.registerSubclass(listObject.class) in your Application constructor before calling Parse.initialize().
顺便说一句,您应该使用 Java 标准来声明类,在您的例子中是 ListObject。 (大写L)
希望对你有帮助!
关于android - 无法在 Android 中保存 parseobject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28328970/