2015-10-07 1 views
0

Я использую библиотеку Retrofit для получения и разбора JSON с сервера. Все методы, запускаемые в MainActivity, когда приложение запускается. И у меня возникают проблемы, когда я проверяю, что Object (проанализирован JSON) уже существует в базе данных или нет. Приложение не отвечает. Что я могу сделать?Retrofit и SQlite как удалить лаги

здесь MainActivity:

общественный класс MainActivity расширяет FragmentActivity реализует MYFragmentListener, OnBackPressedListener {

public static String FRAGMENT_INSTANCE_NAME = ""; 
public static String PACKAGE_NAME; 

private DrawerLayout mDrawerLayout; 
DrawerAdapter listAdapter; 


private Level level; 


private String drawerlist[]; 
public static DrawerLayout drawer_layout; 
private ListView mDrawerList; 
private int EXPAND_GROUP; 
private int SELECTED_CHILD; 
private int LANGUAGE_POSITION; 


int height; 

public AsanaPOJO [] asanasPOJO; 

private List<String> listDataHeader; 
private List<String> listData; 
private HashMap<String, List<String>> listDataChild; 
private ExpandableListView expListView; 
private ExpandableListView.LayoutParams expParam; 
private LinearLayout expListLay; 
private List<String> language; 


private FragmentTransaction fTrans; 
private FragmentManager fm; 



private mainFragmentPh main_fragment_ph; 
private StepOnePh step_one_ph; 
private StepTwoPh step_two_ph; 
private ProgramsVideoPh program_video_ph; 
private ProgramOnePh program_one_ph; 
private ProgramsPh programs_ph; 
private AsanaOnePh asana_one_ph; 
private AsanasPh asanas_ph; 
private Finish2Ph finish2_ph; 

private mainFragmentTb main_fragment_tb; 
private ProgramAddTb program_add_tb; 
private ProgramsVideoTb programs_video_tb; 
private ProgramOneTb program_one_tb; 
private ProgramsTb programs_tb; 
private AsanaOneTb asana_one_tb; 
private AsanasTb asanas_tb; 
private Finish2Tb finish2_tb; 
private AsanaInfoTb asana_info_tb; 

Fragment fragment; 


private Finish finish; 
private add add_d; 





boolean drawer_st; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.activity_main); 



    PACKAGE_NAME = getApplicationContext().getPackageName(); 
    LANGUAGE_POSITION=-1; 

    language = new ArrayList(); 
    final MYDBHelperFromApi DBHelperAPI = new MYDBHelperFromApi(this); 


    MYapi myapi = (MYapi) new Builder().setLogLevel(LogLevel.FULL).setEndpoint(MYurl.BASE_URL).build().create(MYapi.class); 
    myapi.getLanguages(new Callback<HashMap<String, String>>() { 
     public void success(HashMap<String, String> hashMap, Response response) { 
      language.addAll(hashMap.values()); 
      Log.d("LOGS", hashMap.toString() + " " + response.toString()); 
      DBHelperAPI.addLanguages(hashMap); 
     } 

     public void failure(RetrofitError error) { 
      Log.d("LOGS", "FUUUUUUUUUUUU"); 
     } 
    }); 
    myapi.getLevelList(new Callback<List<AsanaLevel>>() { 
     public void success(List<AsanaLevel> asanaLevels, Response response) { 
      for (AsanaLevel a : asanaLevels) { 
       Log.d("LEVELASANA LOGS", BuildConfig.FLAVOR + a.toString()); 
      } 
      DBHelperAPI.addAsanaLevel(asanaLevels); 
     } 

     public void failure(RetrofitError error) { 
     } 
    }); 
    myapi.getTypeList(new Callback<List<AsanaType>>() { 
     public void success(List<AsanaType> asanaTypes, Response response) { 
      for (AsanaType a : asanaTypes) { 
       Log.d("TYPEASANA LOGS", BuildConfig.FLAVOR + a.toString()); 
      } 
      DBHelperAPI.addAsanaType(asanaTypes); 
     } 

     public void failure(RetrofitError error) { 

     } 
    }); 
    myapi.getProgramGoalList(new Callback<List<ProgramGoal>>() { 
     public void success(List<ProgramGoal> programGoals, Response response) { 
      for (ProgramGoal a : programGoals) { 
       Log.d("GOALPROGRAM LOGS", BuildConfig.FLAVOR + a.toString()); 
      } 
      DBHelperAPI.addProgramGoal(programGoals); 
     } 

     public void failure(RetrofitError error) { 
     } 
    }); 
    myapi.getProgramLevelList(new Callback<List<ProgramLevel>>() { 
     public void success(List<ProgramLevel> programLevels, Response response) { 
      for (ProgramLevel a : programLevels) { 
       Log.d("LevelPROGRAM LOGS", BuildConfig.FLAVOR + a.toString()); 
      } 
      DBHelperAPI.addProgramLevel(programLevels); 
     } 

     public void failure(RetrofitError error) { 
     } 
    }); 
    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) { 

     } 
    }); 


    expListLay =(LinearLayout) findViewById(R.id.expListlay); 



    .................. 

}

и методы из 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; 

} 
+0

Вы должны добавить код своей 'деятельности'. Ваши фрагменты кода ничего не говорят о том, когда и как они называются. – eleven

+0

вы должны попытаться использовать службу Intent или задачу async для нескольких операций db в одно и то же время, потому что это приводит к тому, что ваш основной поток выполняет слишком много работы. – Mayur

ответ

2

то, что вы сделали вызывает асинхронную и конечную точку ssing тяжелая операция db в основной нити. Вы можете сделать все это в фоновом потоке, используя одиночную AsyncTask.

Измените асинхронные модернизированные конечные точки синхронны, как:

void getPrograms(Callback<Programs>); 

в

Programs myapi.getPrograms(); 

и одной асинхронной задачу, как:

public class MyHeavyTask extends AsyncTask<Void, Void, Void> { 

    private final MYDBHelperFromApi DBHelperAPI; 
    private final MYapi myapi; 

    public MyHeavyTask(MYDBHelperFromApi DBHelperAPI, MYapi myapi) { 
     this.DBHelperAPI = DBHelperAPI; 
     this.myapi = myapi; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     HashMap<String, String> hashMap = myapi.getLanguages(); 
     boolean valid = hashMap != null;// do other validation catch exceptions if needed 
     //Do response validation 
     //Add to your database 
     if (valid) 
      DBHelperAPI.addLanguages(hashMap); 

     //similarly 
     List<AsanaLevel> asanaLevels = myapi.getLevelList(); 
     DBHelperAPI.addAsanaLevel(asanaLevels); 

     List<AsanaType> asanaTypes = myapi.getTypeList(); 
     DBHelperAPI.addAsanaType(asanaTypes); 

     List<ProgramGoal> programGoals = myapi.getProgramGoalList(); 
     DBHelperAPI.addProgramGoal(programGoals); 

     //Similarly others 

     return null; 
    } 
} 

Теперь выполнить задачу в методе OnCreate как :

new MyHeavyTask(DBHelperAPI,myapi).execute(); 
Смежные вопросы