首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Realm无效类型

Realm无效类型
EN

Stack Overflow用户
提问于 2019-12-11 06:40:10
回答 1查看 73关注 0票数 0

我尝试使用Realm在我的android应用程序中创建一个愿望列表。我将数据从适配器放到SinglePost活动中,并尝试将它们放入realm并在另一个活动中显示。在SinglePost活动中,我得到了这个错误!这是我的活动

代码语言:javascript
复制
public class SinglePost extends AppCompatActivity {
    String id, image, url, content, video;
    Realm realm;
    public Adapter adapter;
    ModelPost postInfo;
    private String postId;
    public static final String Key_Post = "ID";
...
        id = getIntent().getStringExtra("ID");
        postTitle.setText(getIntent().getStringExtra("Title"));
        postExpert.setText(getIntent().getStringExtra("Expert"));
        image = getIntent().getStringExtra("Image");

        postId = getIntent().getStringExtra("ID");

        realm = Realm.getDefaultInstance();
        RealmResults<ModelPost> result = realm.where(ModelPost.class).equalTo(Key_Post, postId).findAll();
        if (result.size() != 0) {
            bookmark.setImageResource(R.drawable.ic_bookmark_black_24dp);
        } else {
            bookmark.setImageResource(R.drawable.ic_bookmark_border_black_24dp);
        }
        Bookmark();
    }

    private void Bookmark() {

        bookmark.setOnClickListener(v -> realm.executeTransaction(realm -> {
            RealmResults<ModelPost> results = realm.where(ModelPost.class).equalTo(Key_Post, id).findAll();
            if (results.size() == 0) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                }
                realm.copyToRealm(postInfo);
                bookmark.setImageResource(R.drawable.ic_bookmark_black_24dp);
                Toast.makeText(getApplicationContext(), "Added", Toast.LENGTH_SHORT).show();
            } else {
                results.get(0).deleteFromRealm();
                bookmark.setImageResource(R.drawable.ic_bookmark_border_black_24dp);
                Toast.makeText(getApplicationContext(), "Removed", Toast.LENGTH_SHORT).show();

            }
        }));
    }

型号:

Model Class

配置:

代码语言:javascript
复制
public class G extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        Realm.init(getApplicationContext());
        RealmConfiguration configuration = new RealmConfiguration.Builder()
                .name(Realm.DEFAULT_REALM_NAME)
                .schemaVersion(0)
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm.setDefaultConfiguration(configuration);
    }
}

错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Invalid query: field 'ID' in class 'ModelPost' is of invalid type 'INTEGER'.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 06:59:23

您将以字符串的形式从活动意图附加文件中检索所需的ID。您的模型类型使用整数作为ID字段。这就是为什么类型不匹配而您得到一个错误的原因。

顺便说一下,您创建的两个变量(postIdId)似乎具有相同的用途-您确定需要这两个变量吗?我会保留其中的一个,但将其设置为int字段。这个答案的其余部分假设您保留了id

首先,检查这是否也是您将值添加到intent的方式(即,您使用字符串参数而不是整数调用intent.putExtra() )。如果它是一个整数,那么你可以使用上面的getIntExtra()代替getStringExtra(),并直接赋值给id。如果它确实是一个字符串,那么您需要转换为一个整数,如下所示。

代码语言:javascript
复制
String idAsString = getIntent().getStringExtra("ID");
id = Integer.valueOf(idAsString).intValue();

那么一切都应该是好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59276396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档