领域无效类型
Realm invalid type
我尝试使用 Realm 在我的 android 应用程序中创建愿望清单。我将适配器中的数据放入 SinglePost Activity,然后尝试将它们放入领域并显示在另一个 activity 中。
在 SinglePost Activity 中我得到了这个错误!
这是我的 Activity
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
配置:
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);
}
}
错误:
java.lang.IllegalArgumentException: Invalid query: field 'ID' in class 'ModelPost' is of invalid type 'INTEGER'.
您正在从 activity intent extras 中以字符串的形式检索所需的 ID。您的模型类型对 ID
字段使用整数。这就是类型不匹配并且您收到错误的原因。
顺便说一句,您正在创建两个似乎具有相同用途的变量(postId
和 Id
)- 您确定需要这两个变量吗?我会保留其中之一,但将其设为 int
字段。此答案的其余部分假设您保持 id
.
首先,检查这是否也是您将值添加到意图的方式(即您使用字符串参数而不是整数调用 intent.putExtra()
)。如果是整数,那么可以用上面的getIntExtra()
代替getStringExtra()
,直接赋值给id
。如果它确实是一个字符串,那么你需要转换成一个整数,如下所示。
String idAsString = getIntent().getStringExtra("ID");
id = Integer.valueOf(idAsString).intValue();
那应该一切都好。
我尝试使用 Realm 在我的 android 应用程序中创建愿望清单。我将适配器中的数据放入 SinglePost Activity,然后尝试将它们放入领域并显示在另一个 activity 中。 在 SinglePost Activity 中我得到了这个错误! 这是我的 Activity
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
配置:
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);
}
}
错误:
java.lang.IllegalArgumentException: Invalid query: field 'ID' in class 'ModelPost' is of invalid type 'INTEGER'.
您正在从 activity intent extras 中以字符串的形式检索所需的 ID。您的模型类型对 ID
字段使用整数。这就是类型不匹配并且您收到错误的原因。
顺便说一句,您正在创建两个似乎具有相同用途的变量(postId
和 Id
)- 您确定需要这两个变量吗?我会保留其中之一,但将其设为 int
字段。此答案的其余部分假设您保持 id
.
首先,检查这是否也是您将值添加到意图的方式(即您使用字符串参数而不是整数调用 intent.putExtra()
)。如果是整数,那么可以用上面的getIntExtra()
代替getStringExtra()
,直接赋值给id
。如果它确实是一个字符串,那么你需要转换成一个整数,如下所示。
String idAsString = getIntent().getStringExtra("ID");
id = Integer.valueOf(idAsString).intValue();
那应该一切都好。