【问题标题】:How to pass data from realm results to an array list?如何将数据从领域结果传递到数组列表?
【发布时间】:2016-10-27 04:41:55
【问题描述】:

我已经执行了一个领域事务,并为我的数据模型传递了一个 json 数组。

public void execute(Realm realm){
    for (int i = 0; i<menuListArray.length(); i++ ){
        try{
            JSONObject jObject = menuListArray.getJSONObject(i);
            user.setMenuTitle(jObject.getString("title"));
            realm.copyToRealm(user);
            Intent intent = new Intent(getApplication(), ProfileLandingActivity.class);
            startActivity(intent);
            finish();
        } catch (Exception e){
            e.printStackTrace();
        }
    } 
}

我已经执行了以下查询来获取对象

public RealmResults<User> getUserMenu() {
    return realm.where(User.class).distinct("menuTitle");
}

我正在另一个活动中使用领域结果getUserMenu():

RealmResults<User> users = RealmController.initialize(this).getUserMenu();

现在,如果我执行users.first(),我只能从 JSON 中获取第一个数据,如果我执行 users.last(),我只能从 JSON 中获取最后一个数据。但我必须从领域结果用户那里获取所有数据。我该如何从 JSON 中获取所有数据?我必须将这些数据传递到数组列表中。

如果我有任何问题的陈述不符合我正在努力成为开发者的语言,请原谅我。

【问题讨论】:

  • 尝试通过intent传递菜单标题字符串数组列表。
  • 我可以这样做,但是以后用于数据,我可能不得不使用领域,对吧?
  • 请检查 copyToRealm 重载方法:realm.io/docs/java/latest/api/io/realm/…,我认为它允许您复制多个对象可迭代列表。
  • 什么是RealmController?
  • 一个单独的类文件,用于处理与功能要求相关的所有领域查询。

标签: java android realm


【解决方案1】:

您必须在 for 循环之外使用 Intent,如下所示...

public void execute(Realm realm){
        for (int i = 0; i<menuListArray.length(); i++ ){
            try{
                JSONObject jObject = menuListArray.getJSONObject(i);
                user.setMenuTitle(jObject.getString("title"));
                realm.copyToRealm(user);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
        Intent intent = new Intent(getApplication(), ProfileLandingActivity.class);
        startActivity(intent);
        finish();
    }

您可以使用此代码获取所有标题

for (User userData : users ) {
            String title = userData.getMenuTitle();
        }

【讨论】:

  • 谢谢@sagar Pithiya
  • 由于我是开发新手,请您建议将所有“标题”数据传递到数组中。
  • 如果您将所有标题读入一个数组,您将失去自动更新和惰性求值。 -_- 使用 RecyclerView 和 RealmRecyclerViewAdapter
【解决方案2】:
public void execute(Realm realm){
    for (int i = 0; i < menuListArray.length(); i++) {
        try{
            JSONObject jObject = menuListArray.getJSONObject(i);
            user.setMenuTitle(jObject.getString("title"));
            realm.insert(user);
        } catch (Exception e){
            e.printStackTrace();
        }
    } 
    Intent intent = new Intent(getApplication(), ProfileLandingActivity.class);
    startActivity(intent);
    finish();
}

然后在其他活动中,使用带有RealmRecyclerViewAdapter 的 RecyclerView 显示元素。

    RecyclerView.Adapter adapter = new RealmRecyclerViewAdapter<User, UserViewHolder>(getContext(), RealmController.initialize(this).getUserMenu(), true) {
        @Override
        public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new UserViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_user_item, parent, false));
        }

        @Override
        public void onBindViewHolder(UserViewHolder holder, int position) {
            User user = getData().get(position);
            holder.menuTitle.setText(user.getMenuTitle());
        }
    };
    recyclerView.setAdapter(adapter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多