[英]Error while reading data from Realm in android
我最近被介绍给Android的Realm数据库。 与SQLite相比,这似乎非常容易,我制作了一个简单的应用程序对其进行测试。 数据已保存,但由于某种原因我无法检索它。
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
}
}
另外,您还需要在模块级build.gradle中应用realm-android
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();
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.