mercredi 7 octobre 2015

Retrofit and SQlite how to remove lags

I use Retrofit library for getting and parsing JSON from server. All methods I run in MainActivity when Application is starting. And I have trouble when I check is Object(parsed from JSON) already exist in Data Base or not. Application is not responsing. What can I do?

here is methods from MainActivity:

 final MYDBHelperFromApi DBHelperAPI = new MYDBHelperFromApi(this);


        MYapi myapi = (MYapi) new Builder().setLogLevel(LogLevel.FULL).setEndpoint(MYurl.BASE_URL).build().create(MYapi.class);

        myapi.getAsanas(new Callback<Asanas>() {
            public void success(Asanas asanas,
                                Response response) {

                DBHelperAPI.addAsanas(asanas);
                List<Integer> listDB = DBHelperAPI.getAsanasIds();
                DBHelperAPI.checkForDeletedAsanas(asanas, listDB);
                for (AsanaPOJO a : asanas.getAsanas()) {
                    Log.d("AsanaPROGRAM LOGS", BuildConfig.FLAVOR + a.getName());
                }
            }

            public void failure(RetrofitError error) {
                Log.d("FAILURE", "Failure");
            }
        });

        myapi.getPrograms(new Callback<Programs>() {
            @Override
            public void success(Programs programs, Response response) {
                DBHelperAPI.addPrograms(programs);
                for (ProgramPOJO p : programs.getPrograms()) {
                    Log.d("PROGRAMs LOGS", BuildConfig.FLAVOR + p.getName());
                }
            }

            @Override
            public void failure(RetrofitError error) {

            }
        });

and methods from DBhelper:

public void addPrograms(Programs programs){
open();
ContentValues values = new ContentValues();

for (ProgramPOJO p : programs.getPrograms()) {
    values.put(KEY_ID,p.getId());
    values.put(KEY_DURATION,p.getDuration());
    values.put(KEY_MAX_AGE,p.getMax_age());
    values.put(KEY_MIN_AGE,p.getMin_age());
    values.put(KEY_ISPAID,p.checkBool(p.getIs_paid()));
    values.put(KEY_IS_QUICK_RECEIPT,p.checkBool(p.getIs_quick_receipt()));
    values.put(KEY_BACKGROUND_SOUND_ID,p.getBackground_sound_id());
    values.put(KEY_IMGLARGE,p.getImgLarge());
    values.put(KEY_IMGTHUMB,p.getImgThumb());
    values.put(KEY_NAME,p.getName());
    values.put(KEY_GOAL_ID,p.getGoal_id());
    values.put(KEY_LEVEL_ID,p.getLevel_id());
    values.put(KEY_OLDPK,p.getOld_pk());
    if (checkById(TABLE_PROGRAMS, KEY_ID, p.getId())) {

        Log.d("LOGSPROGRAMOnly", " allready exist");

    } else {
        this.dbase.insert(TABLE_PROGRAMS, null, values);

        Log.d("LOGSPROGRAMOnly", p.getName() + " added");

    }
    for (Poses poses :p.getPoses()){
        ContentValues valuesForPose = new ContentValues();
        valuesForPose.put(KEY_ID,poses.getId());
        valuesForPose.put(KEY_POSITION,poses.getPosition());
        valuesForPose.put(KEY_DURATION,poses.getDuration());
        valuesForPose.put(KEY_VOICE,poses.getVoice());
        valuesForPose.put(KEY_ASANA_ID,poses.getAsana_id());
        valuesForPose.put(KEY_OLDPK,poses.getOld_pk());
        if (checkById(TABLE_POSES, KEY_ID, poses.getId())) {

            Log.d("LOGSPose", " allready exist");

        } else {
            this.dbase.insert(TABLE_POSES, null, valuesForPose);

            Log.d("LOGSPose", p.getName() + " added");


        }

        ContentValues valuesForPoseProgram = new ContentValues();
        valuesForPoseProgram.put(KEY_PROGRAM_ID, p.getId());
        valuesForPoseProgram.put(KEY_POSE_ID, poses.getId());
        if (checkPoseById(p.getId(), poses.getId())) {

            Log.d("LOGSPROGRAMPose", " allready exist");

        } else {
            this.dbase.insert(TABLE_POSES_PROGRAMS, null, valuesForPoseProgram);

            Log.d("LOGSPROGRAMPose", p.getName() + " added");


        }
    }
}

}

public void addAsanas(Asanas asanas) {
open();

ContentValues values = new ContentValues();
for (AsanaPOJO a : asanas.getAsanas()) {

    values.put(KEY_ID, Integer.valueOf(a.getId()));
    values.put(KEY_NAME, a.getName());
    values.put(KEY_IMGLARGE, a.getImgLarge());
    values.put(KEY_IMGTHUMB, a.getImgThumb());
    values.put(KEY_LEVELID, Integer.valueOf(a.getLevel_id()));
    values.put(KEY_TYPEID, Integer.valueOf(a.getType_id()));
    values.put(KEY_AUDIO, a.getAudio());
    values.put(KEY_TITLEAUDIO, a.getTitle_audio());
    values.put(KEY_DURATION, Integer.valueOf(a.getDuration()));
    values.put(KEY_SHORTDESC, a.getShortDesc());
    values.put(KEY_FULLDESC, a.getFullDesc());
    values.put(KEY_PHOTO, a.getPhoto());
    values.put(KEY_SANSKRITNAME, a.getSanskrit_name());
    values.put(KEY_SANSKRITAUDIOTITLE, a.getSanskrit_audio_title());
    values.put(KEY_BREATHINGVIDEO, a.getBreathing_video());
    values.put(KEY_ISBREATHING, Integer.valueOf(a.checkBool(a.getIs_breathing())));
    values.put(KEY_ISPAID, Integer.valueOf(a.checkBool(a.getIs_paid())));
    values.put(KEY_OLDIDENTIFIER, a.getName());
    values.put(KEY_OLDPK, a.getName());
    values.put(KEY_VIDEO, a.getVideo());
    if (checkById(TABLE_ASANAS, KEY_ID, a.getId())) {

        Log.d("LOGSASANA", " allready exist");

    } else {
        this.dbase.insert(TABLE_ASANAS, null, values);

        Log.d("LOGSASANA", a.getName() + " added");

    }


}
close();
}
public boolean checkById(String TableName, String dbfield, int id){
    Cursor cursor = this.dbase.rawQuery("SELECT * FROM " + TableName + " WHERE " + dbfield + " = " +  id , null);
    if (cursor.getCount() <= 0) {
        cursor.close();
        return false;
    }
    cursor.close();
    return true;

}

Aucun commentaire:

Enregistrer un commentaire