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