Java 我正在制作一个提醒应用程序,并尝试使用realm。我正在使用getInstance()。这是我得到的错误
无法将io.realm.RealmConfiguration转换为android.content.Context。 这是我的活动类Java 我正在制作一个提醒应用程序,并尝试使用realm。我正在使用getInstance()。这是我得到的错误,java,android,database,realm,Java,Android,Database,Realm,无法将io.realm.RealmConfiguration转换为android.content.Context。 这是我的活动类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reminder); rvListings = (RecyclerVi
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminder);
rvListings = (RecyclerView) findViewById(R.id.events);
list = new ArrayList<ListingsModel>();
// read the saved values in database
Realm myRealm = Realm.getInstance(getBaseContext());
results1 = myRealm.where(EventModelDB.class).findAll();
for (int i = results1.size() - 1; i >= 0; i--) {
EventModelDB c = results1.get(i);
model = new ListingsModel();
model.setEvent(c.getEvent());
model.setTime(c.getTime());
model.setDate(c.getDate());
model.setTimestamp(c.getTimestamp());
list.add(model);
}
adapter = new ListingsAdapter(list, getBaseContext());
rvListings.setAdapter(adapter);
mLayoutManager = new LinearLayoutManager(this);
// mLayoutManager.setReverseLayout(true);
// mLayoutManager.setStackFromEnd(true);
rvListings.setLayoutManager(mLayoutManager);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u提醒);
rvListings=(RecyclerView)findViewById(R.id.events);
列表=新的ArrayList();
//读取数据库中保存的值
Realm myRealm=Realm.getInstance(getBaseContext());
results1=myRealm.where(EventModelDB.class).findAll();
对于(int i=results1.size()-1;i>=0;i--){
eventmodeldbc=results1.get(i);
model=新的ListingsModel();
model.setEvent(c.getEvent());
setTime(c.getTime());
model.setDate(c.getDate());
setTimestamp(c.getTimestamp());
列表。添加(模型);
}
adapter=newlistingsadapter(list,getBaseContext());
rvListings.setAdapter(适配器);
mLayoutManager=新的LinearLayoutManager(此);
//mLayoutManager.setReverseLayout(true);
//mLayoutManager.setStackFromEnd(true);
rvListings.setLayoutManager(mLayoutManager);
}
这是我的ListingsAdapter。我在这里遇到同样的错误。以下是相关部分。我甚至试过用这个
RealmConfiguration realmConfig1 = new
RealmConfiguration.Builder(getContext()).name("1testSave1.realm").build();
Realm.deleteRealm(realmConfig1);
Realm myRealm = Realm.getInstance(realmConfig1);
public class ListingsAdapter extends RecyclerView.Adapter<ListingsAdapter.Viewholder> {
public ListingsAdapter(ArrayList<ListingsModel> data, Context context) {
this.data = data;
this.context = context;
}
// long click an item to delete it from database
holder.toplayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// deleting the selected row from Realm database
Realm realm = Realm.getInstance(context);
RealmResults<EventModelDB> result = realm.where(EventModelDB.class)
.equalTo("timestamp", data.get(position).getTimestamp())
.findAll();
if(result != null){
if(result.size() > 0){
realm.beginTransaction();
result.remove(0);
realm.commitTransaction();
}
}
}
});
}
realmconfig realmconfig=new
RealmConfiguration.Builder(getContext()).name(“1testSave1.realm”).build();
Realm.deleteRealm(realmConfig1);
Realm myRealm=Realm.getInstance(realmConfig1);
公共类ListingsAdapter扩展了RecyclerView.Adapter{
公共ListingsAdapter(ArrayList数据、上下文){
这个数据=数据;
this.context=上下文;
}
//长时间单击某个项目可将其从数据库中删除
holder.toplayout.setOnLongClickListener(新视图。OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
//从域数据库中删除所选行
Realm Realm=Realm.getInstance(上下文);
RealmResults result=realm.where(EventModelDB.class)
.equalTo(“timestamp”,data.get(position.getTimestamp())
.findAll();
如果(结果!=null){
如果(result.size()>0){
realm.beginTransaction();
结果:删除(0);
realm.commitTransaction();
}
}
}
});
}
}在设置内容视图(R.layout.activity\u提醒)之后代码>
添加这个:Realm.init(这个)代码>您正在将Android上下文传递给Realm
Realm myRealm = Realm.getInstance(getBaseContext());
这需要一个真实的配置
RealmConfiguration myConfig = new RealmConfiguration();
// config myConfig
Realm myRealm = Realm.getInstance(myConfig);
有关更多信息,请参见,假设您从build.gradle中删除以下内容:
dependencies {
// compile 'io.realm:realm-android:0.82.2`
}
并在您的项目级构建gradle中将其替换为最新版本
classpath "io.realm:realm-gradle-plugin:4.3.3"
并应用插件
apply plugin: 'com.android.application'
// other plugins
apply plugin: 'realm-android'
现在我们可以讨论这里有多少事情是错误的,所以首先我们应该添加
dependencies {
implementation 'io.realm:android-adapters:2.1.1'
}
然后我们可以在应用程序类中进行
public class CustomApplication extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
Realm.setDefaultConfiguration(new RealmConfiguration.Builder()
.name("1testSave1.realm")
.build());
}
}
然后在AndroidManifest.xml中
<application android:name=".CustomApplication"
{
//实际上,把这个放在这里
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u提醒);
rvListings=findViewById(R.id.events);
realm=realm.getDefaultInstance();
结果=realm.where(EventModelDB.class).findalsync();
结果:addChangeListener(realmChangeListener);
adapter=新的ListingsAdapter(领域、结果);
rvListings.setAdapter(适配器);
mLayoutManager=新的LinearLayoutManager(这是LinearLayoutManager.VERTICAL,false);
rvListings.setLayoutManager(mLayoutManager);
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
结果:removeAllChangeListeners();
realm.close();
结果=空;
realm=null;
}
}
及
公共类ListingsAdapter扩展RealmRecyclServiceAdapter{
私人最终领域;
公共ListingsAdapter(领域、RealmResults结果){
超级(结果,正确);
this.realm=领域;
}
@凌驾
公共无效onBindViewHolder(Viewholder,int位置){
EventModelDB event=getData().get(位置);
最终长时间戳=event.getTimestamp();
//长时间单击某个项目可将其从数据库中删除
holder.toplayout.setOnLongClickListener(新视图。OnLongClickListener(){
@凌驾
公共布尔onLongClick(视图v){
//从域数据库中删除所选行
realm.executeTransactionAsync((r)->{
r、 其中(EventModelDB.class)
.equalTo(“时间戳”,时间戳)
.findAll()
.deleteAllFromRealm();
});
}
});
}
}
轰,修好你的船这是什么版本的王国,0.82.2?
public class MyActivity extends AppCompatActivity {
Realm realm;
RealmResults<EventModelDB> results;
RealmChangeListener<RealmResults<EventModelDB>> realmChangeListener = (results) -> {
// actually, just keep this here
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminder);
rvListings = findViewById(R.id.events);
realm = Realm.getDefaultInstance();
results = realm.where(EventModelDB.class).findAllAsync();
results.addChangeListener(realmChangeListener);
adapter = new ListingsAdapter(realm, results);
rvListings.setAdapter(adapter);
mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
rvListings.setLayoutManager(mLayoutManager);
}
@Override
protected void onDestroy() {
super.onDestroy();
results.removeAllChangeListeners();
realm.close();
results = null;
realm = null;
}
}
public class ListingsAdapter extends RealmRecyclerViewAdapter<EventModelDB, ListingsAdapter.Viewholder> {
private final Realm realm;
public ListingsAdapter(Realm realm, RealmResults<EventModelDB> results) {
super(results, true);
this.realm = realm;
}
@Override
public void onBindViewHolder(Viewholder holder, int position) {
EventModelDB event = getData().get(position);
final long timestamp = event.getTimestamp();
// long click an item to delete it from database
holder.toplayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// deleting the selected row from Realm database
realm.executeTransactionAsync((r) -> {
r.where(EventModelDB.class)
.equalTo("timestamp", timestamp)
.findAll()
.deleteAllFromRealm();
});
}
});
}
}