簡體   English   中英

在Android中從Realm讀取數據時出錯

[英]Error while reading data from Realm in android

我最近被介紹給Android的Realm數據庫。 與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
    }
}

另外,您還需要在模塊級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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM