在 android 中从 Realm 读取数据时出错
Error while reading data from Realm in android
我最近被介绍到 android 领域数据库。与 SQLite 相比,它似乎非常容易,我做了一个简单的应用程序来测试它。正在保存数据,但由于某种原因我无法检索它。
这是 MainActivity
package com.fayaz.realm;
public class MainActivity extends AppCompatActivity {
public Realm realm;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
btn=(Button)findViewById(R.id.btn);
realm=Realm.getInstance(getApplicationContext());
//WRITE
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText taskEditText = new EditText(MainActivity.this);
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("Add a new task")
.setMessage("What do you want to do next?")
.setView(taskEditText)
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String task = String.valueOf(taskEditText.getText());
realm.beginTransaction();
Person person=realm.createObject(Person.class);
person.setName(task);
Toast.makeText(getApplicationContext(),"ADDED",Toast.LENGTH_SHORT).show();
realm.commitTransaction();
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}
});
//READ
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Execute the query:
RealmResults<Person> results = realm.where(Person.class).findAll();
String name=results.toString();
Toast.makeText(getApplicationContext(),name,Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
realm.close();
}
}
每当我调用函数读取数据时都会弹出错误消息
java.lang.UnsatisfiedLinkError: No implementation found for long io.realm.internal.TableView.nativeSync(long) (tried Java_io_realm_internal_TableView_nativeSync and Java_io_realm_internal_TableView_nativeSync__J)
您应该将 RealmConfiguration
传递给 Realm.getInstance()
而不是 getApplicationContext()
。它应该看起来像这样。
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name("myrealm.realm")
.build();
Realm realm = Realm.getInstance(config);
您应该至少更新到 Realm 1.0.0
,但最新的(在撰写本文时是 Realm 1.1.1
)。
您使用的 Realm.getInstance(Context)
肯定最迟在 0.91.0
中删除了。
要使用 Realm 的最新版本,您需要使用 Android Studio 和 Gradle,将其添加到您的项目级别 build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:1.1.1" //this line
}
}
而且你还需要在模块级别应用realm-android
Gradle插件build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'realm-android' // this line
谈论过时版本中的错误没有多大意义。大概一年前就修好了。
编辑:
//READ
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Execute the query:
RealmResults<Person> results = realm.where(Person.class).findAll();
if(!results.isEmpty()) {
Person person = results.get(0);
String name = person.getName();
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
}
});
我最近被介绍到 android 领域数据库。与 SQLite 相比,它似乎非常容易,我做了一个简单的应用程序来测试它。正在保存数据,但由于某种原因我无法检索它。
这是 MainActivity
package com.fayaz.realm;
public class MainActivity extends AppCompatActivity {
public Realm realm;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
btn=(Button)findViewById(R.id.btn);
realm=Realm.getInstance(getApplicationContext());
//WRITE
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText taskEditText = new EditText(MainActivity.this);
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("Add a new task")
.setMessage("What do you want to do next?")
.setView(taskEditText)
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String task = String.valueOf(taskEditText.getText());
realm.beginTransaction();
Person person=realm.createObject(Person.class);
person.setName(task);
Toast.makeText(getApplicationContext(),"ADDED",Toast.LENGTH_SHORT).show();
realm.commitTransaction();
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}
});
//READ
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Execute the query:
RealmResults<Person> results = realm.where(Person.class).findAll();
String name=results.toString();
Toast.makeText(getApplicationContext(),name,Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
realm.close();
}
}
每当我调用函数读取数据时都会弹出错误消息
java.lang.UnsatisfiedLinkError: No implementation found for long io.realm.internal.TableView.nativeSync(long) (tried Java_io_realm_internal_TableView_nativeSync and Java_io_realm_internal_TableView_nativeSync__J)
您应该将 RealmConfiguration
传递给 Realm.getInstance()
而不是 getApplicationContext()
。它应该看起来像这样。
RealmConfiguration config = new RealmConfiguration.Builder(context)
.name("myrealm.realm")
.build();
Realm realm = Realm.getInstance(config);
您应该至少更新到 Realm 1.0.0
,但最新的(在撰写本文时是 Realm 1.1.1
)。
您使用的 Realm.getInstance(Context)
肯定最迟在 0.91.0
中删除了。
要使用 Realm 的最新版本,您需要使用 Android Studio 和 Gradle,将其添加到您的项目级别 build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:1.1.1" //this line
}
}
而且你还需要在模块级别应用realm-android
Gradle插件build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'realm-android' // this line
谈论过时版本中的错误没有多大意义。大概一年前就修好了。
编辑:
//READ
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Execute the query:
RealmResults<Person> results = realm.where(Person.class).findAll();
if(!results.isEmpty()) {
Person person = results.get(0);
String name = person.getName();
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
}
});