Skip to content

Instantly share code, notes, and snippets.

@shakdwipeea
Last active August 4, 2019 18:19
Show Gist options
  • Save shakdwipeea/cf46036c3f7983adca5c1c2b389446cd to your computer and use it in GitHub Desktop.
Save shakdwipeea/cf46036c3f7983adca5c1c2b389446cd to your computer and use it in GitHub Desktop.
Realm Cascade
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();
}
package com.shakdwipeea.realmcascade;
/**
* Created by ashak on 18-09-2016.
*/
public interface BaseRealmObject {
void delete();
}
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"}
]
}
]
})
});
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();
}
}
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();
}
}
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();
}
}
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();
}
}
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