【问题标题】:I am making a reminder app, and I have tried to use realm. I am using getInstance().This is the error I get我正在制作一个提醒应用程序,并且我尝试使用领域。我正在使用 getInstance()。这是我得到的错误
【发布时间】:2018-01-20 14:04:03
【问题描述】:

无法将 io.realm.RealmConfiguration 转换为 android.content.Context。 这是我的活动类

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

这是我的 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();

                }
            }

        }
    });


}

}

【问题讨论】:

  • 这是什么版本的Realm,0.82.2?

标签: java android database realm


【解决方案1】:

因此,假设您从 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'
}

然后我们可以在Application类中做

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】:

    setContentView(R.layout.activity_reminder);之后

    添加这个:Realm.init(this);

    【讨论】:

      【解决方案3】:

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

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

      这需要是一个 RealmConfiguration。

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

      欲了解更多信息,请参阅https://realm.io/docs/dotnet/latest/#realms

      【讨论】:

        猜你喜欢
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 2021-08-12
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多