2017-04-06 68 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(); 
    } 
} 
相關問題