android - 使用 MYSQL 查询结果进行 Realm 查询

标签 android mysql realm

我需要创建一个 Realm 查询(可能是异步的),以使用从 MYSQL 查询到在线数据库获取的 ID 从 Realm 数据库检索卡片的图像: 问题是,要创建 Realm 查询,我需要编写 query.equalTo("name", "John"); 但我不知道用户有多少张卡,所以我无法使用那种类型的查询。我该如何解决这个问题?谢谢:)

我对在线数据库的互联网调用:

public void getCards() { //It is used when adapter is created, and it need to contain all cards to display

        //Realm realm = Realm.getDefaultInstance();

        String urlToGet = "myurl";

        OkHttpClient client = new OkHttpClient();

        RequestBody formBody = new FormBody.Builder()
                .add("user_name", user_name)
                .build();

        Request request = new Request.Builder()
                .url(urlToGet)
                .post(formBody)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                if (!response.isSuccessful()) {
                    throw new IOException("Unexpected code " + response);
                }

                responseCardInInventory = response.body().string();

                handler.post(new Runnable() {
                    @Override
                    public void run() {

                        Realm realm = Realm.getDefaultInstance();
                        List<CardInInv> cardListInInv = new ArrayList<>();

                        Gson gson = new Gson();
                        CardInInventory civ = gson.fromJson(responseCardInInventory, CardInInventory.class);
                        cardListInInv = getGsonCards(civ);

                        RealmQuery<Card> query = realm.where(Card.class);


                        //TODO EXECUTE REALM QUERY
                        //TODO HERE I NEED TO USE REALM TO EXECUTE A QUERY USING cardListInInv


                    }
                });
            }
        });

    }

最佳答案

如果没有我的评论中指定的有关您的域的足够信息,我所能指定的就是正确的解决方案应该是什么样子。

public class MyActivity extends AppCompatActivity {

    Executor executor = Executors.newSingleThreadedPool(); // bg thread

    Realm realm;
    RealmResults<Card> results;
    RealmChangeListener<RealmResults<Card>> realmChangeListener = new RealmChangeListener<RealmResults<Card>>() {
        public void onChange(RealmResults<Card> element) { // updates on Write
            adapter.setData(element); 
        }
    }

    MyAdapter adapter;


    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        realm = Realm.getDefaultInstance();
        results = realm.where(Card.class).equalTo("userId", user_name);
        results.addChangeListener(realmChangeListener);

        adapter = new MyAdapter();

        String urlToGet = "myurl";

        executor.post(new Runnable() { // TODO: cancellation
            @Override
            public void run() {

                OkHttpClient client = ((CustomApplication)getApplication()).getOkHttpClient();

                Gson gson = ((CustomApplication)getApplication()).getGson();

                RequestBody formBody = new FormBody.Builder()
                        .add("user_name", user_name)
                        .build();

                Request request = new Request.Builder()
                        .url(urlToGet)
                        .post(formBody)
                        .build();


                Response response = client.newCall(request).execute();
                if (!response.isSuccessful()) {
                    throw new IOException("Unexpected code " + response);
                }            
                responseCardInInventory = response.body().string();

                CardInInventory civ = gson.fromJson(responseCardInInventory, CardInInventory.class);
                List<CardInInv> cardListInInv = getGsonCards(civ);

                realm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        Card card = new Card();
                        for(CardInInv cardInInv: cardListInInv) {
                            // map inv to card
                        }
                        realm.insertOrUpdate(card);
                    }
                });
           }
        });
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    results.removeAllChangeListeners();
    results = null;
    realm.close();
}

关于android - 使用 MYSQL 查询结果进行 Realm 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48641856/

相关文章:

mysql - WordPress 的复杂 MySQL 查询

ios - 在自动释放池中使用 Realm 的正确方法是什么?

java - Libgdx 和谷歌 IAP

mysql - 在 MySQL 中按顺序、分组和按日期枚举记录

php - Doctrine2 将不可变字段移动到单独的类中

android - Android Realm 4.3.1无法更改Gradle插件版本

ios - prepareForSegue 中出现“从不正确的线程访问的 Realm ”错误; swift

java - Android MVVM/Repository 如何强制 LiveData 从存储库更新?

android - 使用适用于 Android 的 google places api 网络服务搜索附近的特定地点

javascript - shouldOverrideUrlLoading 仅针对某些网页被调用