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スレッドで空です。それを確認することができます。このような例:

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を使用しています、私はそれを保存するときLoaderがonLoadFinishedを開始し、それをISIDE私はactualy活動theatを始めています、asyncLoader内のデータを保存しています(私は使用しても、データベースから読んでいたデータを表示AsyncLoader)ので、あなたのケースはほとんど不可能です。 – Turbozanik

関連する問題