Android 获取NullPointer并将对象添加到RealmList
在Realm数据库Android中尝试向RealmList添加新对象时出现问题。我总是在以下位置收到空指针错误: Global.USER_LOGGED.getProductsGrid().add(pFinal) 这是我的型号:Android 获取NullPointer并将对象添加到RealmList,android,realm,Android,Realm,在Realm数据库Android中尝试向RealmList添加新对象时出现问题。我总是在以下位置收到空指针错误: Global.USER_LOGGED.getProductsGrid().add(pFinal) 这是我的型号: @RealmClass public class UserRealm extends RealmObject implements Serializable { private String email; priva
@RealmClass
public class UserRealm extends RealmObject implements Serializable {
private String email;
private String password;
private String tokenId;
private String tokenSecret;
private String creationDate;
private RealmList<ProductRealm> productsGrid; //Temp table to load category products
private CartRealm cart; //One-to-one relationship
/*GETTERS & SETTERS*/
...
}
@RealmClass
public class ProductRealm extends RealmObject implements Serializable {
private String catId; //Only one category per product. In generic case many category per product
private String entityId;
private String parentId;
private String typeId;
private String sku;
private String canaryProduct;
private String premium;
private String brand;
private String dinitosQty;
private String name;
private String ean;
private String description;
private String shortDescription;
private String attributeSet;
private String weight;
private String isSaleable;
private String imageUrl;
private String unit;
private String unitFresh;
private String childrenSelected;
private float price;
private float minWeight;
private float quantityWeight;
private int quantity;
private int stock;
private int typeOfAttribute; //0: Per units | 1: Per weight
private RealmList<AttributeRealm> attributeItems;
private RealmList<ProductRealm> children;
/* GETTERS & SETTERS */
...
}
我正在阅读realmdoc,我看到创建RealmList有两种模式:托管和非托管。我试图创建两个,但我总是有相同的错误
如何在数据库中创建对象并分配给RealmList?
我的代码出了什么问题
提前感谢:)
更新:
public static void parseProducts(String result){
Logs.MessageLogs("parseProducts", result, "v", Global.SHOW_LOGS);
Object product = null;
JSONObject json = null;
ProductRealm pFinal, p = new ProductRealm();
try {
json = new JSONObject(result);
if(Global.USER_LOGGED.getProductsGrid().size() > 0)
_CRUDDatabase.clearProductsGrid(Global.REALM);
for (Iterator<?> iterator = json.keys(); iterator.hasNext(); ) {
String key = (String) iterator.next();
if (json.get(key) instanceof JSONObject) { //Category with children
product = ((JSONObject) json.get(key));
Global.REALM.beginTransaction();
pFinal = Global.REALM.createObject(ProductRealm.class);
pFinal = _CRUDDatabase.createNewProduct(Global.PREVIOUS_CATEGORY.getId(), product);
Global.USER_LOGGED.getProductsGrid().add(pFinal);
Global.REALM.commitTransaction();
}
}
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception ex){
ex.printStackTrace();
}
}
我的单身班:
public class Global {
private static Global instance = null;
...
//Realm
public static Realm REALM; //Database Realm
public static String DATABASE_NAME; //Name of Realm database
public static UserRealm USER_LOGGED; //Object of the user logged
...
private Global() {
//Realm
REALM = null;
DATABASE_NAME = "keymarket.realm";
USER_LOGGED = null;
...
}
public static Global getInstance(){
if(instance == null){
instance = new Global();
}
return instance;
}
在将对象添加到列表之前,您需要将对象添加到域中,因为域内部将调用getId(或获取其主键的任何方法)以便将对象添加到列表中。由于它使用代理方法,并且对象未添加到域中,因此将出现空指针异常。能否提供堆栈跟踪的其余部分?确定。我将更新我的帖子:)看起来你是从线程访问对象的。注意文档中的这一点:“此外,异步查询目前不受支持。”我从服务器获取产品,当我得到响应时,我解析通过此方法获得的json,但这不是异步查询call@AdaeRodríguez您需要在全局之后调用getInstance。而且单身人士的字段不应该是静态的,我不能投票,但它是有效的!!。你真是个笨蛋!!你们不能投票,但据我所知,你们可以在答案上打上记号:)这和投票一样有帮助。
public class Global {
private static Global instance = null;
...
//Realm
public static Realm REALM; //Database Realm
public static String DATABASE_NAME; //Name of Realm database
public static UserRealm USER_LOGGED; //Object of the user logged
...
private Global() {
//Realm
REALM = null;
DATABASE_NAME = "keymarket.realm";
USER_LOGGED = null;
...
}
public static Global getInstance(){
if(instance == null){
instance = new Global();
}
return instance;
}