有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我正在制作一个提醒应用程序,我已经尝试使用realm。我正在使用getInstance()。这就是我得到的错误

无法转换io。领域安卓的RealmConfiguration。所容纳之物上下文 这是我的活动类

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

这是我的列表适配器。我这里也有同样的错误。以下是相关部分。我甚至试过用这个

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

                }
            }

        }
    });


}

}


共 (3) 个答案

  1. # 1 楼答案

    因此,假设您从构建中删除以下内容。格雷德尔:

    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"
    

    然后

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

    轰,修好你的船

  2. # 2 楼答案

    setContentView(R.layout.activity_reminder);之后

    添加以下内容:Realm.init(this);

  3. # 3 楼答案

    您正在将Android上下文传递给Realm

    Realm myRealm = Realm.getInstance(getBaseContext());
    

    这需要一个真正的配置

    RealmConfiguration myConfig = new RealmConfiguration();
    // config myConfig
    Realm myRealm = Realm.getInstance(myConfig);
    

    有关更多信息,请参见https://realm.io/docs/dotnet/latest/#realms