0

I am making an android quiz app. For which fetching the questions from my database.I am parsing the data received from php and saving it in DB,php file is working fine. For parsing i am using Volley and Storing the Model Question with six fields "question" , "optionA" , "optionB" ,"optionC" ,"optionD" and "correct" in to Realm Database configured with default instances. Data is getting stored well, but when ever I am trying to access the database where Model questions stored in RealmList it's giving me just last value inserted into the database. I searched for the Solution and in a answer here in SO, one mentioned to do this. but that does not work, I get a exception which is not logged into the logcat in android studio.Please help.

Below is the code i have done so far..

Questions.java

public class Questions extends RealmObject {
    public RealmList<ModelQuestion> questionsList=new RealmList<>();

    public void addQuestion(ModelQuestion modelQuestion){
        questionsList.add(modelQuestion);
    }
    public RealmList<ModelQuestion> getQuestionsList(){
        return this.questionsList;
    }
}

ModelQuestion.java

public class ModelQuestion extends RealmObject {
    private String question;
    private String optionA;
    private String optionB;
    private String optionC;
    private String optionD;
    private String correct;
    private RealmList < ModelQuestion > modelQuestionList;

    public String getCorrect() {
        return correct;
    }

    public void setCorrect(String correct) {
        this.correct = correct;
    }

    public String getOptionA() {
        return optionA;
    }

    public void setOptionA(String optionA) {
        this.optionA = optionA;
    }

    public String getOptionB() {
        return optionB;
    }

    public void setOptionB(String optionB) {
        this.optionB = optionB;
    }

    public String getOptionC() {
        return optionC;
    }

    public void setOptionC(String optionC) {
        this.optionC = optionC;
    }

    public String getOptionD() {
        return optionD;
    }

    public void setOptionD(String optionD) {
        this.optionD = optionD;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public RealmList < ModelQuestion > getModelQuestionList() {
        return modelQuestionList;
    }

    public void setModelQuestionList(RealmList < ModelQuestion > modelQuestionList) {
        this.modelQuestionList = modelQuestionList;
    }
}

main part of the function where everything regarding is storing is happening..

try {
    JSONObject jsonObject = new JSONObject(response);
    JSONArray jsonArray = jsonObject.optJSONArray("questions");
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject1 = jsonArray.optJSONObject(i);
        question = jsonObject1.optString("question", "Question not available.");
        optionA = jsonObject1.optString("optionA", "Option unavailable");
        optionB = jsonObject1.optString("optionB", "Option unavailable");
        optionC = jsonObject1.optString("optionC", "Option unavailable");
        optionD = jsonObject1.optString("optionD", "Option unavailable");
        correct = jsonObject1.optString("correct", "X");
        realm.executeTransactionAsync(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                if (!dbInitialized) {
                    questions = realm.createObject(Questions.class);
                    dbInitialized = true;
                }
                ModelQuestion modelQuestion = new ModelQuestion();
                modelQuestion.setQuestion(question);
                modelQuestion.setOptionA(optionA);
                modelQuestion.setOptionB(optionB);
                modelQuestion.setOptionC(optionC);
                modelQuestion.setOptionD(optionD);
                modelQuestion.setCorrect(correct);

                ModelQuestion mq = realm.copyToRealm(modelQuestion);
                questions.getQuestionsList().add(mq);
                //Toast.makeText(MainActivity.this,questions.getQuestionsList().size()+"",Toast.LENGTH_SHORT).show();
            }
        }, new Realm.Transaction.OnSuccess() {
            @Override
            public void onSuccess() {
                progressDialog.dismiss();
                new AppPreferences().setDownloadComplete(context, true);
            }
        }, new Realm.Transaction.OnError() {
            @Override
            public void onError(Throwable error) {

            }
        });
    }


} catch (JSONException e) {
    e.printStackTrace();
    new AppPreferences().setDownloadComplete(context, false);
    Intent intent = new Intent(MainActivity.this, PlayGround.class);
    startActivity(intent);
}

where I am fetching data from Realm:

RealmResults < Questions > questionDB = realm.where(Questions.class).findAll();
// for(int i=0;i<questionDB.size();i++){
RealmList < ModelQuestion > mod = questionDB.get(0).getQuestionsList();
for (int j = 0; j < mod.size(); j++) {
    qu += mod.get(j).getQuestion() + "\n";
    Toast.makeText(context, qu, Toast.LENGTH_SHORT).show();
}
// }
questionsTV.setText(qu);

Realm is configured with default instances in MyApplication class:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);
        RealmConfiguration config = new RealmConfiguration.Builder().build();
        Realm.setDefaultConfiguration(config);
    }
}
Community
  • 1
  • 1
Anuran Barman
  • 1,556
  • 2
  • 16
  • 31

0 Answers0