1

Mit welcher Technik kann ich warten, bis mein ContentProvider gefüllt ist, bevor ich eine bestimmte Aktivität starte? Ich verwende einen SyncAdapter, um den ContentProvider zu laden.Warten Sie, bis ContentProvider geladen wird, bevor Sie eine Aktivität starten

Normalerweise möchte ich meine Benutzeroberfläche nicht blockieren. Aber meine App ist eine Daten-App und die Daten kommen vom Remote-Server; Von dort wird es in meinem ContentProvider (sqlite db) gespeichert. Also zeige ich dem Benutzer eine SplashActivity. Ich möchte, dass der Inhaltsanbieter geladen wird, bevor ich den Benutzer zur MainActivity bringe. Wie mache ich das? Auch hier ist meine app SplashActivity -> MainActivity

Antwort

1

können Sie Benutzer AsyncTask

Like:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 

    //MAKE YOUR REQUEST HERE 
    protected Long doInBackground(URL... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 
      totalSize += Downloader.downloadFile(urls[i]); 
      publishProgress((int) ((i/(float) count) * 100)); 
      // Escape early if cancel() is called 
      if (isCancelled()) break; 
     } 
     return totalSize; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     setProgressPercent(progress[0]); 
    } 

    //When finish the request CALL MainActivity HERE 
    protected void onPostExecute(Long result) { 
     showDialog("Downloaded " + result + " bytes"); 
    } 
} 

Oder nutzen Sie die Volley library

0

ich dies eine BroadcastReceiver mit der Lösung endete. Eine AsyncTask würde nicht funktionieren, da ich einen SyncAdapter verwende. Also warte ich, bis der SyncAdapter fertig ist und sende einen Broadcast. Ich bin mir nicht sicher, wie schlimm das werden kann, da das Internet für einige Benutzer langsam ist. Aber bis jetzt funktioniert es.