我尝试使用Realm在我的android应用程序中创建一个愿望列表。我将数据从适配器放到SinglePost活动中,并尝试将它们放入realm并在另一个活动中显示。在SinglePost活动中,我得到了这个错误!这是我的活动
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();
}
}));
}型号:
配置:
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'.发布于 2019-12-11 06:59:23
您将以字符串的形式从活动意图附加文件中检索所需的ID。您的模型类型使用整数作为ID字段。这就是为什么类型不匹配而您得到一个错误的原因。
顺便说一下,您创建的两个变量(postId和Id)似乎具有相同的用途-您确定需要这两个变量吗?我会保留其中的一个,但将其设置为int字段。这个答案的其余部分假设您保留了id。
首先,检查这是否也是您将值添加到intent的方式(即,您使用字符串参数而不是整数调用intent.putExtra() )。如果它是一个整数,那么你可以使用上面的getIntExtra()代替getStringExtra(),并直接赋值给id。如果它确实是一个字符串,那么您需要转换为一个整数,如下所示。
String idAsString = getIntent().getStringExtra("ID");
id = Integer.valueOf(idAsString).intValue();那么一切都应该是好的。
https://stackoverflow.com/questions/59276396
复制相似问题