2017-04-06 67 views
0

我有2个活动,我想在单击列表项时将活动1的数据发送到活动2。点击我可以将数据映射到该ListItem,该数据是一种RealmList类型。我用Gson库将我的模型转换为Json字符串。如果我的数据是List的一种类型,但我正在使用RealmList,则可以实现此目的。当我尝试实现以下时,我的应用程序被冻结。无法将RealmList <T>转换为JSONObject字符串android

这是我的过滤器型号:

Filter filter = new Filter(); 
    filter.setTitle(""); 
    filter.setId(""); 
    filter.setCode(""); 

RealmList是这样的:

RealmList<Filter> list = new RealmList<Filter>(); 

我想上面所列内容转换为JSONObject的字符串如下:

new Gson().toJson(filter)) 

以上现场捐赠我有以下错误:

PID: 12959 Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 4. Wait queue head age: 5647.8ms.) 
              Load: 10.67/9.63/9.38 
              CPU usage from 1103ms to -6084ms ago: 
               101% 12959/com.anubavam.creatrix: 98% user + 3.4% kernel/faults: 6335 minor 15 major 
               44% 832/system_server: 25% user + 18% kernel/faults: 8128 minor 104 major 
               10% 1623/com.android.phone: 5.5% user + 5.4% kernel/faults: 4275 minor 57 major 
               3.6% 4304/android.process.media: 1.7% user + 1.9% kernel/faults: 4931 minor 73 major 
               0% 286/debuggerd: 0% user + 0% kernel/faults: 3205 minor 38 major 
               5.8% 91/kswapd0: 0% user + 5.8% kernel 
               5.8% 1272/com.android.systemui: 3.8% user + 1.9% kernel/faults: 2852 minor 39 major 
               4.5% 302/zygote: 3% user + 1.5% kernel/faults: 11239 minor 
               3.4% 1580/com.motorola.process.system: 2.3% user + 1.1% kernel/faults: 1881 minor 1 major 
               3.3% 153/mmcqd/0: 0% user + 3.3% kernel 

注意列表和ArrayList不会给我任何错误,它的工作文件。但RealmList是问题。 我也尝试下面的行也没用。

List<Filter> list = new RealmList<Filter>(); 

任何人都可以解决这个问题。

回答

2

截至目前,Realm对象不是Serializable,请参阅this answer。这意味着您无法将此对象通过Intent传递给其他活动,或者使用GSON库将其转换为JSON

但是,有两种方法可以让您的模型在第二个活动中使用。

  1. 使用该密钥对从DB通过这个模型的主键通过Intent和在第二
    活动获取模型试。
  2. 您可以通过这个Parceler库来序列化 对象并传递给第二个活动。 检查this answer使用Parceler
1

Realm目前不支持通过Intent传递数据。可 选项是

1)发送一些独特的ID来第二次活动,并重新查询同一对象在第二活动

2)同样通过使用Third party Parceler

您可能需要添加的依赖,以及

compile "org.parceler:parceler-api:x.x.x" 
apt "org.parceler:parceler:x.x.x" 
1

我想点击一个列表项时从活动1将数据发送到活动2。

Parcelling数据和创建非托管/分离的数据副本是滥用领域。

通过意图发送数据的主键,并在第二个活动中查询该对象。

Intent intent = new Intent(this, OtherActvity.class); 
intent.putExtra("itemId", listItem.getId()); 
startActivity(intent); 

public class OtherActivity extends AppCompatActivity { 
    Realm realm; 

    ListItem listItem; 

    @Override 
    public void onCreate(Bundle bundle) { 
     realm = Realm.getDefaultInstance(); 
     super.onCreate(bundle); 
     listItem = realm.where(ListItem.class).equalTo("id", getIntent().getExtras().getString("itemId")).findFirst(); // re-query 
     // ... 
    } 

    @Override 
    public void onDestroy() { 
     realm.close(); 
     realm = null; 
     super.onDestroy(); 
    } 
} 
相关问题