2017-02-18 5 views
0

私はレルムプログラミングで初心者です。コードを書いて、レルムテーブルにいくつかの値を挿入することができます。初めて、キーで項目を選択し、存在する場合は削除した後、新しい項目を挿入しました。 これは私が私のアプリを実行すると、私はHAVA私が間違っているかわからないとどのように私はこの問題を解決することができますレルム内の行を削除できません

java.lang.IllegalStateException: Nested transactions are not allowed. Use commitTransaction() after each beginTransaction(). 

がクラッシュする?私のコード

private void insertIntoDatabase() 
{ 
    mRealm.beginTransaction(); 

    mRealm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm realm) { 
      RealmResults<VinScannerHistoryModel> rows = 
        realm.where(VinScannerHistoryModel.class) 
          .equalTo("userName",vinScannerModel.getName()) 
          .equalTo("vinNumber",vinNumber.getText().toString()) 
          .findAll(); 
      if(rows!=null) 
      { 
       rows.clear(); 
       realm.commitTransaction(); 

      } 
     } 
    }); 


     ImagesObject imagesObject = mRealm.createObject(ImagesObject.class); 
     VinScannerHistoryModel vinScannerHistoryModel = mRealm.createObject(VinScannerHistoryModel.class); 
     vinScannerHistoryModel.setVinNumber(vinNumber.getText().toString()); 
     vinScannerHistoryModel.setStatus(status); 
     vinScannerHistoryModel.setManufacturer(manufacturer); 
     vinScannerHistoryModel.setModel(model); 

     vinScannerHistoryModel.setYear(year); 

     vinScannerHistoryModel.setVin(vin); 
     vinScannerHistoryModel.setTerminal_out_date(terminal_out_date); 
     if(Global.imagePath!=null && Global.imagePath.size()>0) 
     { 
      for (int i = 0; i < Global.imagePath.size(); i++) { 
       imagesObject.setImageName(Global.imagePath.get(i)); 
       vinScannerHistoryModel.getImagesObjects().add(imagesObject); 

      } 

     } 
     if(checkBox.isChecked()) 
      vinScannerHistoryModel.setKey("1"); 
     else 
      vinScannerHistoryModel.setKey("0"); 
     vinScannerHistoryModel.setPolygon(polygonAdapter.getItem(spinnerPosition).getId()+""); 
     vinScannerHistoryModel.setUserName(vinScannerModel.getName()); 
    mRealm.commitTransaction(); 
} 

ですか例外の P.S 私が言ったように、私は初心者レルムプログラミングだと、あなたのオプションで、それは私のDBに重複した項目を削除する正しい方法です 感謝

+0

'mRealm.beginTransaction()私の自己を解かれ;'と 'mRealm.executeTransaction()'両方とも)(executeTransaction '除いて、新しいトランザクションを開始'は例外を処理するだけでなく、トランザクションを取り消すことで例外を処理します。 – EpicPandaForce

+0

「重複削除」については? '@ PrimaryKey'を使って" duplications "を持たないようにしてください – EpicPandaForce

答えて

0

テキストは、非常に明確であることはないですか?トランザクション内でトランザクションを開始することはできません。

mRealm.beginTransaction(); 

RealmResults<VinScannerHistoryModel> rows = 
     realm.where(VinScannerHistoryModel.class) 
       .equalTo("userName", vinScannerModel.getName()) 
       .equalTo("vinNumber", vinNumber.getText().toString()) 
       .findAll(); 
if (rows != null) { 
    rows.clear(); 
} 
.... 
.... 
+0

どのようにアイテムを削除してから新しいアイテムを追加できますか? – BekaKK

+0

アイテムを最初に削除し、新しいアイテムを追加します。 – Divers

+0

私は最初に削除して新しい項目を追加しようとしますが、クラッシュすることなくクラッシュコードを表示することができます。 – BekaKK

0

この正しいanswer.Iは

RealmResults<VinScannerHistoryModel> results 
      = mRealm.where(VinScannerHistoryModel.class) 
      .equalTo("userName",vinScannerModel.getName()) 
      .equalTo("vinNumber",vinNumber.getText().toString()) 
      .findAll(); 

    mRealm.beginTransaction(); 
    if(results!=null) 
     results.clear(); 
関連する問題