ich einen Splash-Screen für mein Android App erstellt haben,Android Splash Screen Firebase Synchronisation
in dieser Aktivität Ich brauche ein paar Geräusche von Feuerbasis Speicher zum Herunterladen und synchronisiert meine lokale Datenbank mit Feuerbasis Echtzeit-Datenbank.
aber wenn ich die App starte, sehe ich in meinem Protokoll die Synchronisation mit Firebase weiter nach dem Startbildschirm und die Daten sind nicht in der Gebietsschema-Datenbank, wenn die mainActivity gestartet wird. Wer zum Starten der MainActivity nach der Firebase-Synchronisation zu tun ist.
Mein Code:
public class SplashScreen extends Activity {
// Splash screen timer
private static int SPLASH_TIME_OUT = 3000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
File folder = new File(Environment.getExternalStorageDirectory() + "/"+getString(R.string.folder_name));
if(!folder.exists()) {
folder.mkdir();
}
new DataSyncFb(this).execute();
}
public class DataSyncFb extends AsyncTask<Void, Integer, Void> {
private Context context;
private StorageReference mStorageRef;
public DataSyncFb(final Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i("DataSincFB", "onPreExecute");
}
@Override
protected Void doInBackground(Void... voids) {
final DatabaseHandler db = new DatabaseHandler(context);
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference("categorie");
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try {
List<String> listCat = db.getAllCategoriesId();
List<String> listSounds = db.getAllSoundsId();
Log.i("test", String.valueOf(dataSnapshot.getValue()));
Gson test = new Gson();
JSONArray jsonArray = new JSONArray(test.toJson(dataSnapshot.getValue()));
for (int i = 0; i < jsonArray.length(); i++){
JSONObject cat = jsonArray.getJSONObject(i);
String nom = cat.getString("nom");
String id = cat.getString("id");
if (!listCat.contains(id)) {
db.addCategorie(nom, id);
}
JSONArray sounds = cat.getJSONArray("son");
Log.i("cat", sounds.toString());
for (int j = 0; j < sounds.length(); j++){
JSONObject sound = sounds.getJSONObject(j);
String soundId = sound.getString("id");
if (!listSounds.contains(soundId)){
//downloadFile(sound.getString("lien"));
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReferenceFromUrl("gs://soundbox-a6dd8.appspot.com");
StorageReference islandRef = storageRef.child(sound.getString("lien")+".mp3");
File rootPath = new File(Environment.getExternalStorageDirectory(), context.getString(R.string.folder_name));
if(!rootPath.exists()) {
rootPath.mkdirs();
}
final File localFile = new File(rootPath,sound.getString("lien")+".mp3");
islandRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
Log.e("firebase ",";local tem file created created " +localFile.toString());
// updateDb(timestamp,localFile.toString(),position);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.e("firebase ",";local tem file not created created " +exception.toString());
}
});
db.addSound(soundId, sound.getString("nom"), sound.getString("lien") ,id);
}
}
}
Log.i("sound", String.valueOf(db.getAllSound()));
Log.i("Firebase", jsonArray.toString());
Log.i("Firebase", String.valueOf(db.getAllCategories()));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.i("DataSyncFB", "onPostExecute");
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
// close this activity
finish();
}
aber ich viele Sound herunterladen, damit ich den Download in einem für machen, also kann ich nicht den Code aus onPost zu onSuccess –
bearbeitet meine Antwort @kingramizy bewegen –