Last active
August 4, 2019 18:19
-
-
Save shakdwipeea/cf46036c3f7983adca5c1c2b389446cd to your computer and use it in GitHub Desktop.
Realm Cascade
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade; | |
import com.shakdwipeea.realmcascade.model.ModelA; | |
import retrofit2.Call; | |
import retrofit2.http.GET; | |
/** | |
* Created by ashak on 18-09-2016. | |
*/ | |
public interface ApiService { | |
@GET("/") | |
Call<ModelA> getData(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade; | |
/** | |
* Created by ashak on 18-09-2016. | |
*/ | |
public interface BaseRealmObject { | |
void delete(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
router.get('/', function(req, res, next) { | |
res.json({ | |
message: "Modela message", | |
modelBs: [ | |
{ | |
message: "Model B message", | |
modelCs: [ | |
{ message: "Model C message" }, | |
{ message: "Model C message 2"} | |
] | |
}, | |
{ | |
message: "Model B message 2", | |
modelCs: [ | |
{ message: "Model C message 2.1" }, | |
{ message: "Model C message 2.2"} | |
] | |
} | |
] | |
}) | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade; | |
import android.os.Bundle; | |
import android.support.v7.app.AppCompatActivity; | |
import android.view.View; | |
import android.widget.Button; | |
import android.widget.TextView; | |
import com.shakdwipeea.realmcascade.model.ModelA; | |
import com.shakdwipeea.realmcascade.model.ModelB; | |
import com.shakdwipeea.realmcascade.model.ModelC; | |
import io.realm.Realm; | |
import io.realm.RealmConfiguration; | |
import io.realm.RealmResults; | |
import retrofit2.Call; | |
import retrofit2.Callback; | |
import retrofit2.Response; | |
import retrofit2.Retrofit; | |
import retrofit2.converter.gson.GsonConverterFactory; | |
public class MainActivity extends AppCompatActivity implements Callback<ModelA>, View.OnClickListener { | |
private TextView dataBefore; | |
private Realm realm; | |
private Button deleteButton; | |
private Button clearDB; | |
private Button getData; | |
ApiService service; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
dataBefore = (TextView) findViewById(R.id.data_before); | |
deleteButton = (Button) findViewById(R.id.delete); | |
clearDB = (Button) findViewById(R.id.delete_all); | |
getData = (Button) findViewById(R.id.get_data); | |
Retrofit retrofit = new Retrofit.Builder() | |
.baseUrl("http://192.168.0.110:3000") | |
.addConverterFactory(GsonConverterFactory.create()) | |
.build(); | |
RealmConfiguration realmConfig = new RealmConfiguration.Builder(this) | |
.deleteRealmIfMigrationNeeded() | |
.build(); | |
Realm.setDefaultConfiguration(realmConfig); | |
realm = Realm.getDefaultInstance(); | |
service = retrofit.create(ApiService.class); | |
getData(); | |
deleteButton.setOnClickListener(this); | |
clearDB.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
clearRealm(); | |
} | |
}); | |
getData.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
getData(); | |
} | |
}); | |
} | |
public void getData() { | |
service.getData().enqueue(this); | |
} | |
@Override | |
public void onResponse(Call<ModelA> call, final Response<ModelA> response) { | |
realm.executeTransaction(new Realm.Transaction() { | |
@Override | |
public void execute(Realm realm) { | |
realm.copyToRealm(response.body()); | |
} | |
}); | |
printDb(); | |
} | |
public void printDb() { | |
ModelA first = realm.where(ModelA.class) | |
.findFirst(); | |
System.out.println("model a " + (first != null ? first.getMessage() : "Empty")); | |
RealmResults<ModelB> modelBs = realm.where(ModelB.class) | |
.findAll(); | |
for (ModelB m: modelBs) { | |
System.out.println("Model B 0" + m.getMessage()); | |
} | |
RealmResults<ModelC> all = realm.where(ModelC.class).findAll(); | |
for (ModelC c : all) { | |
System.out.println("Modelc " + c.getMessage()); | |
} | |
if (first != null) | |
dataBefore.setText(first.getMessage() + first.getModelBs().toString()); | |
} | |
@Override | |
public void onFailure(Call<ModelA> call, Throwable t) { | |
dataBefore.setText(t.getMessage()); | |
t.printStackTrace(); | |
} | |
@Override | |
public void onClick(View v) { | |
realm.executeTransaction(new Realm.Transaction() { | |
@Override | |
public void execute(Realm realm) { | |
ModelA modelA = realm.where(ModelA.class) | |
.findFirst(); | |
if (modelA != null) | |
modelA.delete(); | |
else | |
dataBefore.setText("No mdoela A[resent"); | |
} | |
}); | |
printDb(); | |
} | |
public void clearRealm() { | |
realm.executeTransaction(new Realm.Transaction() { | |
@Override | |
public void execute(Realm realm) { | |
realm.where(ModelA.class).findAll().deleteAllFromRealm(); | |
realm.where(ModelB.class).findAll().deleteAllFromRealm(); | |
realm.where(ModelC.class).findAll().deleteAllFromRealm(); | |
} | |
}); | |
printDb(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade.model; | |
import com.google.gson.Gson; | |
import com.shakdwipeea.realmcascade.BaseRealmObject; | |
import java.util.List; | |
import io.realm.RealmList; | |
import io.realm.RealmObject; | |
/** | |
* Created by ashak on 18-09-2016. | |
*/ | |
public class ModelA extends RealmObject implements BaseRealmObject { | |
private String message; | |
private RealmList<ModelB> modelBs; | |
public ModelA() { | |
} | |
public String getMessage() { | |
return message; | |
} | |
public void setMessage(String message) { | |
this.message = message; | |
} | |
public List<ModelB> getModelBs() { | |
return modelBs; | |
} | |
public void setModelBs(RealmList<ModelB> modelBs) { | |
this.modelBs = modelBs; | |
} | |
@Override | |
public String toString() { | |
return new Gson().toJson(this); | |
} | |
@Override | |
public void delete() { | |
RealmUtil.deleteManagedList(modelBs); | |
deleteFromRealm(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade.model; | |
import com.google.gson.Gson; | |
import com.shakdwipeea.realmcascade.BaseRealmObject; | |
import java.util.List; | |
import io.realm.RealmList; | |
import io.realm.RealmObject; | |
/** | |
* Created by ashak on 18-09-2016. | |
*/ | |
public class ModelB extends RealmObject implements BaseRealmObject { | |
private String message; | |
private RealmList<ModelC> modelCs; | |
public ModelB() { | |
} | |
public String getMessage() { | |
return message; | |
} | |
public void setMessage(String message) { | |
this.message = message; | |
} | |
public List<ModelC> getModelCs() { | |
return modelCs; | |
} | |
public void setModelCs(RealmList<ModelC> modelCs) { | |
this.modelCs = modelCs; | |
} | |
@Override | |
public String toString() { | |
return new Gson().toJson(this); | |
} | |
@Override | |
public void delete() { | |
modelCs.deleteAllFromRealm(); | |
deleteFromRealm(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade.model; | |
import com.google.gson.Gson; | |
import com.shakdwipeea.realmcascade.BaseRealmObject; | |
import io.realm.RealmObject; | |
/** | |
* Created by ashak on 18-09-2016. | |
*/ | |
public class ModelC extends RealmObject implements BaseRealmObject { | |
private String message; | |
public ModelC(String message) { | |
this.message = message; | |
} | |
public ModelC() { | |
} | |
public String getMessage() { | |
return message; | |
} | |
public void setMessage(String message) { | |
this.message = message; | |
} | |
@Override | |
public String toString() { | |
return new Gson().toJson(this); | |
} | |
@Override | |
public void delete() { | |
this.deleteFromRealm(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.shakdwipeea.realmcascade; | |
import io.realm.RealmList; | |
/** | |
* Created by ashak on 19-09-2016. | |
*/ | |
public class RealmUtil { | |
public static void deleteNestedList(RealmList<? extends BaseRealmObject> list) { | |
int length = list.size(); | |
for (int i = 0; i < length; i++) { | |
// since we are dealing with live objects | |
list.get(0).delete(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment