0

各アプリケーションの起動時にデータベースを更新しています。以前はIntentServiceでしたが、データが更新される前にアクティビティが開始していました。 Serviceを使用して(私はServiceのようにIntentServiceのように働いていますので、私は制御スレッドを作成できました)。あなたが最初に見ているように、私はデータを保存しています。その後、私は自分の活動を始めています。しかし、データはとにかく保存される前に私の活動が始まっています。Service/IntentServiceを使用してデータを保存して表示することはできません。

また

あなたはそれ非同期(async)ORM /データベースで作業するいくつかのexpirienceは素晴らしいだろうしている場合、私はちょうど適切にデータベースと連携する方法を学習しようとしています。どんな提案も評価されます。

public class DatabaseWorkService extends Service { 
    private ServiceHandler mServiceHandler; 
    private DatabaseReference mDatabase; 

    private ConnectivityManager conMan; 
    private NetworkInfo netInfo; 
    private String currentTask; 
    private Intent tempIntent; 
    private Looper mServiceLooper; 
    private ResultReceiver resultReceiver; 
    private Context context =this; 
    public DatabaseWorkService delegate = null; 


    // Handler that receives messages from the thread 
    private final class ServiceHandler extends Handler { 
     public ServiceHandler(Looper looper) { 
      super(looper); 
     } 
     @Override 
     public void handleMessage(Message msg) { 
      if(msg.getData()!=null) { 
       switch (msg.getData().getString(Utils.INTENT_SERVICE_INVOKE)) { 
        case Utils.LOAD_All_DATA: { 
         saveActivities(); 
         savePersons(); 
         savePictureData(); 

         Intent intent = new Intent(context, MainActivity.class); 
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(intent); 
         Log.e("order", "forth"); 
         break; 
        } 
        case Utils.READ_ACTIONS_DATA: { 
         readActionData(); 
         break; 
        } 
        case Utils.READ_PERSONS_DATA: { 
         readPersonsData(); 
         break; 
        } 
       } 
      } 
      stopSelf(msg.arg1); 
     } 
    } 

    @Override 
    public void onCreate() { 
     // Start up the thread running the service. Note that we create a 
     // separate thread because the service normally runs in the process's 
     // main thread, which we don't want to block. We also make it 
     // background priority so CPU-intensive work will not disrupt our UI. 
     HandlerThread thread = new HandlerThread("ServiceStartArguments"); 
     thread.start(); 

     // Get the HandlerThread's Looper and use it for our Handler 
     mServiceLooper = thread.getLooper(); 
     mServiceHandler = new ServiceHandler(mServiceLooper); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("service","service started"); 

     Log.e("data",intent.getStringExtra(Utils.INTENT_SERVICE_INVOKE)); 

     Bundle bundle = new Bundle(); 
     bundle.putString(Utils.INTENT_SERVICE_INVOKE,intent.getStringExtra(Utils.INTENT_SERVICE_INVOKE)); 

     // For each start request, send a message to start a job and deliver the 
     // start ID so we know which request we're stopping when we finish the job 
     Message msg = mServiceHandler.obtainMessage(); 
     msg.arg1 = startId; 
     msg.setData(bundle); 
     mServiceHandler.sendMessage(msg); 

     // If we get killed, after returning from here, restart 
     return START_STICKY; 
    } 


    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
+0

saveActivities(アクティビティを起動する必要があります); savePersons(); savePictureData();これらのメソッドは任意の値を返します。あなたはそれをすることができない場合 –

+0

彼らは、何か値を返していない、私は1時間で試してみますが、どのように行動を変えることができますか? – Turbozanik

+0

@jiteshmohite戻り値を追加しましたが、何も変更されていません。 – Turbozanik

答えて

0

これら帖がデータベースに挿入した後、任意の値を返す場合は、あなただけはコードの下

   saveActivities(); 
       savePersons(); 
       savePictureData(); 

試してメインスレッドハンドラ内でアクティビティを起動

Handler handler = new Handler(Looper.getMainLooper()); 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
           Intent intent = new Intent(context, MainActivity.class); 
          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          startActivity(intent); 
         } 
        }); 
+0

変更なし、データベースを操作する正しい方法は何ですか? AsyncLoaderを使用してデータベースを照会しようとしましたが、onFinishLoad内でアクティビティを開始していても、アクティビティは空のままです。 – Turbozanik

+0

私はあなたの活動とmenifestを投稿して、私の最後で試すことができます –

+0

ここでプロジェクト全体が行きますhttps://drive.google.com/open?id=0B-pbp_K-xNkEZjVibWphZ2ZNRnM – Turbozanik

関連する問題