1

AsyncLoader에서 서버의 로컬 데이터베이스에 데이터를 저장하고 있습니다 (onLoadFinished 메소드 내에서 저장된 데이터를 표시하려는 다음 활동을 시작합니다). 그러나 데이터베이스는 실제로 비어 있으며 또한 발생합니다 새 데이터가 추가되면 (기존 데이터베이스 레코드와 잘 작동 함을 의미), 어떻게 해결할 수 있습니까?로더가 onLoadFinished 후에도 데이터를 처리 중입니다.

활동

public class LoadingActivity extends AppCompatActivity implements android.app.LoaderManager.LoaderCallbacks<ArrayList> { 
    Context context; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.laoding_activity); 

     context = this; 
     Bundle bundle = new Bundle(); 

     getLoaderManager().initLoader(0, bundle, this).forceLoad(); 

     Intent broadcastIntent = new Intent(); 
     broadcastIntent.setAction(Utils.MANUAL_START_RECIEVER); 
     sendBroadcast(broadcastIntent); 
    } 
    @Override 
    protected void onPause() { 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

    } 

    @Override 
    public android.content.Loader<ArrayList> onCreateLoader(int id, Bundle args) { 
     DatabaseWorker loader= null; 
     args.putString(Utils.INTENT_SERVICE_INVOKE,Utils.LOAD_All_DATA); 
     loader = new DatabaseWorker(this,args); 
     return loader; 
    } 

    @Override 
    public void onLoadFinished(android.content.Loader<ArrayList> loader, ArrayList data) { 
     Log.e("adad",App.session.getActionsGreenDao().loadAll().size()+""); 
     startActivity(new Intent(this,MainActivity.class)); 
    } 

    @Override 
    public void onLoaderReset(android.content.Loader<ArrayList> loader) { 

    } 
} 

loadInBackground

@Override 
    public ArrayList loadInBackground() { 
     Log.e("loader created","loading"); 
     switch (command) { 
      case Utils.LOAD_All_DATA: { 
       saveActivities(); 
       savePersons(); 
       savePictureData(); 
       return new ArrayList(); 
      } 
      case Utils.READ_ACTIONS_DATA: { 
       readActionData(); 
       return (ArrayList) Action.listAll(Action.class); 
      } 
      case Utils.READ_PERSONS_DATA: { 
       readPersonsData(); 
       return (ArrayList) Person.listAll(Person.class); 
      } 
      default:{ 
       return new ArrayList(); 
      } 
     } 
    } 

답변

0

당신은 DB의 어떤 종류를 사용합니까? 데이터를 어떻게 삽입합니까? 난 당신이 비동기 스레드 트랜잭션에서 이해 이해. 그 메소드 onLoadFinished가 호출 된 후. 그러나 DB에서 커밋 작업은 데이터 크기에 따라 약간의 시간이 필요합니다. 그래서 DB가 UI 스레드에서 비어 있습니다. 그것을 확인할 수 있습니다. 이 같은 예를 들어

내가 GreenDAO을 사용하고
new Handler(getMainLooper()).postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Log.e("adad",App.session.getActionsGreenDao().loadAll().size()+""); 
       startActivity(new Intent(this,MainActivity.class)); 
      } 
     },1000); 
+0

, 내가 asyncLoader 내부에 데이터를 저장하고, 그것을 저장 로더 onLoadFinished 시작하고 나는 또한 사용하여 활동을 theat가 actualy 내가 데이터베이스에서 읽고 있습니다 (데이터를 보려면 시작하고 그것을 iside입니다 AsyncLoader) 그래서 당신의 경우는 거의 불가능합니다. – Turbozanik

관련 문제