Java 域回收器适配器返回单个项

Java 域回收器适配器返回单个项,java,android,json,realm,Java,Android,Json,Realm,我正在从json api获取数据,我已将PrimaryKey设置为状态。这是我正在获取的Json数据: records[   {          "id":"192693681",          "timestamp":"1500204608",          "state":"Rajasthan",          "district":"Rajasamand",          "market":"Rajasamand",          "commodity":"Sug

我正在从json api获取数据,我已将
PrimaryKey
设置为状态。这是我正在获取的
Json
数据:

records[
  {  
         "id":"192693681",
         "timestamp":"1500204608",
         "state":"Rajasthan",
         "district":"Rajasamand",
         "market":"Rajasamand",
         "commodity":"Sugar",
         "variety":"Shakkar",
         "arrival_date":"16/07/2017",
         "min_price":"4000",
         "max_price":"4100",
         "modal_price":"4050"
      },
      {  
         "id":"192693701",
         "timestamp":"1500204608",
         "state":"Rajasthan",
         "district":"Rajasamand",
         "market":"Rajasamand",
         "commodity":"Wheat",
         "variety":"Farmi",
         "arrival_date":"16/07/2017",
         "min_price":"1600",
         "max_price":"1650",
         "modal_price":"1625"
      },
      {  
         "id":"192693721",
         "timestamp":"1500204608",
         "state":"Rajasthan",
         "district":"Rajasamand",
         "market":"Rajasamand",
         "commodity":"Wheat",
         "variety":"Lokwan",
         "arrival_date":"16/07/2017",
         "min_price":"1550",
         "max_price":"1600",
         "modal_price":"1575"
      }
   ]
这是我返回每个州的市场数据的查询:

private void populateMarketData(String state){
        cityAdapter = new CityAdapter(mRealm.where(Records.class).equalTo(Constants.STATE, state).findAll(), this);
        cityRecyclerView.setAdapter(cityAdapter);
        Log.d(TAG, "Total Cities" + String.valueOf(cityAdapter.getData().size()));
        cityAdapter.notifyDataSetChanged();
    } 
 @Override
    public void onMarketClicked(String cityName) {
        tradeAdapter = new TradeAdapter(mRealm.where(Records.class)
                .equalTo(Constants.MARKET, cityName).findAll(), this);
        tradeRecyclerView.setAdapter(tradeAdapter);
    }
这是我的查询,返回市场上所有商品的状态:

private void populateMarketData(String state){
        cityAdapter = new CityAdapter(mRealm.where(Records.class).equalTo(Constants.STATE, state).findAll(), this);
        cityRecyclerView.setAdapter(cityAdapter);
        Log.d(TAG, "Total Cities" + String.valueOf(cityAdapter.getData().size()));
        cityAdapter.notifyDataSetChanged();
    } 
 @Override
    public void onMarketClicked(String cityName) {
        tradeAdapter = new TradeAdapter(mRealm.where(Records.class)
                .equalTo(Constants.MARKET, cityName).findAll(), this);
        tradeRecyclerView.setAdapter(tradeAdapter);
    }
这是
gcmtasksservice
来更新后台服务中的数据:

Realm.init(mContext);
        List<Records> records = new MandiDataHandler().getMandiQuotes(url);
        SaveMandi saveMandi = new SaveMandi(state, records);
        Realm realm = new RealmController(getApplication()).getRealm();
        realm.beginTransaction();
        realm.copyToRealmOrUpdate(saveMandi);
        realm.commitTransaction();
        realm.close();
@PrimaryKey
    private String state;

    private RealmList<Records> recordsRealmList = new RealmList<>();

    public SaveMandi(){}

    public SaveMandi(String state, List<Records> recordsList) {

        try {
            this.state = state;
            for (Records records: recordsList ) {
                records = new Records(records.getId(), DateUtils.getRelativeTimeSpanString(
                        Long.parseLong(records.getTimestamp())).toString(), records.getState(), records.getMarket(),
                        records.getCommodity(), records.getVariety(), records.getMin_price(), records.getMax_price());
                this.recordsRealmList.add(records);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

我的
RealmRecyclerView
中的问题是,当我将
PrimaryKey
设置为state时,它要么返回单个项,要么当我将
PrimaryKey
设置为id时,它返回多个重复数据。我不确定我可能错在哪里。

您希望选择的
主键
只有在它们(您认为的“相等”)时才会匹配,就像
equals()
方法一样。如果将两个具有相同
PrimaryKey
realmobject
放入域中,则其中只有一个将显示在域中,因为每个不同的
PrimaryKey
只能有一个对象

例如,如果我在域中有一个
RealmObject a
PrimaryKey
1
RealmObject b
PrimaryKey的
1
放入域中,
a
将被
b
删除,因为每个
PrimaryKey
只能有一个对象


查看领域数据库的一个好工具是,我强烈推荐它用于调试使用领域的应用程序。

现在它从RealmList返回多个重复项。我已通过json检查了多个相同实体的项如何将它们保存为数据库中的单个对象?[链接]您是否从中获得
RealmController
?因为如果是这样,你应该把它从你的项目中删除,不要回头看。@EpicPandaForce那么你有什么建议?问题是我的json上有重复的项目我如何解析它们作为单个对象存储请检查这里:
Record
中的
id
字段应该用
@PrimaryKey
@EpicPandaForce同一市场的id不同,仍然会返回相同值的多个对象,对吗?我不理解问题