美文网首页Android开发经验谈Android技术知识Android开发
Android fastjson和Realm的完美结合,有坑

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

作者: 全科 | 来源:发表于2016-07-18 17:00 被阅读1039次
    • 转载请注明出处,谢谢

    源码地址: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/

    相关文章

      网友评论

        本文标题:Android fastjson和Realm的完美结合,有坑

        本文链接:https://www.haomeiwen.com/subject/myapjttx.html