1

我在AsyncLoader節省從服務器到本地數據庫中的數據(onLoadFinished方法裏面我開始下一個,我想顯示保存數據的活動),但數據庫是actualy空,也只發生後的數據當添加新的數據(我的意思是現有的數據庫記錄效果很好),我該如何解決這個問題?裝載機正在處理甚至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中提交操作需要一些時間取決於數據大小。這就是爲什麼你的數據庫在UI線程中是空的。你可以檢查它。例如像這樣:

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

我使用GreenDAO,我節省了內部asyncLoader數據,當它被保存裝載機開始onLoadFinished和iside它我開始活動theat actualy查看數據(我是從數據庫中讀取數據也使用AsyncLoader),所以你的情況幾乎是不可能的。 – Turbozanik