Android fastjson和Realm的完美结合,有坑

源码地址:https://github.com/quanke/FastjsonRealm

Realm的安装和fastjson的安装这里就不详细说了。详细的文档在这里 https://realm.io/docs/java/ ,最好看英文文档,中文文档,不是最新的,而且看起来别扭。

现在Realm Java 的最新版本是 1.1.0,fastjson Android的版本是1.1.52

安装Realm Java

在项目中(最外层的build.gradle文件)build.gradle中增加

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:1.1.0"
    }
}

在应用中(一般是名为app模型)build.gradle增加

apply plugin: 'realm-android'

安装fastjson

在应用中(一般是名为app模型)build.gradle增加

compile 'com.alibaba:fastjson:1.1.52.android'

现在我们写一个模型

/**
 * 
 * Created by quanke(http://quanke.name) on 2016/7/18.
 */
public class User extends RealmObject implements Serializable{


    public User() {

    }

    private String          name;
    private int             age;

    @Ignore
    private int             sessionId;

    // Standard getters & setters generated by your IDE…
    public String getName() { return name; }
    public void   setName(String name) { this.name = name; }
    public int    getAge() { return age; }
    public void   setAge(int age) { this.age = age; }
    public int    getSessionId() { return sessionId; }
    public void   setSessionId(int sessionId) { this.sessionId = sessionId; }
}

把User对象通过fastjson转为String


/**

 * Created by quanke(http://quanke.name) on 2016/7/18.
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        User user = new User();
        user.setAge(2);
        user.setName("http://quanke.name");

        String userStr = JSON.toJSONString(user);

        Log.d("userStr:",userStr);

        User userObj = JSON.parseObject(userStr,User.class);

        Log.d("userObj:",userObj+"");
    }
}

这个时候,我以为可以完美的运行了,但是运行的时候,报异常了。

java.lang.NoClassDefFoundError: rx.Observable
at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
...

怎么解决?这里有两种方法。。

第一种:直接使用 RxJava

第二种,不想使用 RxJava,那就创建一个 Observable 空文件

package rx;

public class Observable {
    // Dummy class required for Jackson-Databind support if
    // RxJava is not a project dependency.
}

其实解决方案是官方提供的,只是里面的例子是Jackson而我用的是国产fastjson

Realm 的详细使用这里就不说了。。。有很多小伙伴分享了,但我还是建议看官方文档 https://realm.io/docs/java/