簡體   English   中英

無法轉換RealmList <T> 到JSONObject字符串android

[英]Can not convert RealmList<T> to JSONObject string android

我有2個活動,我想在單擊列表項時將數據從活動1發送到活動2。 單擊我可以獲取映射到該ListItem的數據,該數據是一種RealmList類型。 我使用Gson庫將模型轉換為Json String。 如果我的數據是List類型,但我正在使用RealmList,則可以實現此目的。 當我嘗試實現以下目標時,我的應用程序被凍結。

這是我的過濾器模型:

    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

注意List和ArrayList不會給我任何錯誤,它的工作文件。但是RealmList是問題所在。 我也嘗試以下行,但沒有用。

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

任何人都可以為此解決。

到目前為止,Realm對象不可Serializable ,請參Serializable 答案 這意味着您無法通過Intent將此對象傳遞給其他活動,也不能使用GSON庫將其轉換為JSON

但是,可以通過兩種方式在第二個活動中使用模型。

  1. 通過Intent傳遞此模型的主鍵
    活動使用此密鑰再次從數據庫獲取模型。
  2. 您可以使用此Parceler庫將對象序列化並傳遞給第二個活動。 檢查此答案以使用Parceler

Realm當前不支持通過Intent傳遞數據。 可用的選項有

1)向第二個Activity發送一些唯一的ID,然后在第二個Activity中重新查詢同一對象

2)也使用第三方包裹

您可能還需要添加依賴項

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

單擊列表項時,我想將數據從活動1發送到活動2。

拆分數據並創建非托管/分離的數據副本是對Realm的濫用。

通過該意圖發送數據的主鍵,然后在第二個活動中重新查詢該對象。

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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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