Android NullPointerException void io.realm.RealmChangeListener.onChange()文件
我试图在我的项目中实现Realm数据库,我有一个类,其中包含用于在数据库中添加项的方法,我使用该类存储这些方法并在片段中调用它们,但当我这样做时,我得到一个错误:Android NullPointerException void io.realm.RealmChangeListener.onChange()文件,android,nullpointerexception,realm,realm-migration,Android,Nullpointerexception,Realm,Realm Migration,我试图在我的项目中实现Realm数据库,我有一个类,其中包含用于在数据库中添加项的方法,我使用该类存储这些方法并在片段中调用它们,但当我这样做时,我得到一个错误: java.lang.NullPointerException: Attempt to invoke interface method 'void io.realm.RealmChangeListener.onChange()' on a null object reference 我做错了什么 public class Reposi
java.lang.NullPointerException: Attempt to invoke interface method 'void io.realm.RealmChangeListener.onChange()' on a null object reference
我做错了什么
public class Repositorio extends GlobalActivity {
private RealmChangeListener realmListener;
public Realm realm;
private Context context;
public Repositorio() {
}
public Repositorio(Context context) {
this.context = context;
this.realm = Realm.getDefaultInstance();
this.realmListener = new RealmChangeListener() {
@Override
public void onChange() {
Log.i("realmtest", "some values in the database have been changed");
}
};
this.realm.addChangeListener(realmListener);
}
public void addCliente(String nome, String local, String estado, String telefone, String email, String tipo) {
realm.beginTransaction();
Pessoa mPessoa = realm.createObject(Pessoa.class);
mPessoa.setId(UUID.randomUUID().toString());
mPessoa.setNome(nome);
mPessoa.setCidade(local);
mPessoa.setEstado(estado);
mPessoa.setTelefone(telefone);
mPessoa.setEmail(email);
mPessoa.setTipo(tipo);
realm.commitTransaction();
Toast.makeText(context, "Cliente adicionado com sucesso", Toast.LENGTH_LONG).show();
}
@Override
public void onPause() {
super.onPause();
realm.removeChangeListener(realmListener);
}
@Override
public void onResume() {
super.onResume();
realm.addChangeListener(realmListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (realm != null) {
realm.close();
realm = null;
}
}
}
片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.cadastra_produtos, container, false);
mRepositorio = new Repositorio(getActivity());
novocliente = (TextView) v.findViewById(R.id.novocliente);
novocliente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRepositorio.addCliente("ZÉ", "LALAAL", "SC", "3333-3333", "teste@teste.com", "Pessoa Física");
}
});
return v;
}
全球:
public class GlobalActivity extends AppCompatActivity {
public Ferramentas mFerramentas;
public Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFerramentas = new Ferramentas();
realm = Realm.getDefaultInstance();
}
}
Android框架使用默认构造函数(公共且无参数)实例化
Repositorio
活动
Repositorio
的默认构造函数未将侦听器实例分配给realmListener
字段
因此,当调用onResume()
时,realm.addChangeListener(realmListener)
相当于realm.addChangeListener(null)代码>
您不应该定义默认构造函数以外的构造函数。另外,您不应该手动实例化活动(Repositorio)。我已经编辑了这个问题,请看一看