0
내 안드로이드 앱의 시작 화면을 만들었습니다
,안드로이드 시작 화면 중포 기지 동기화 내가 중포 기지 스토리지에서 어떤 소리를 다운로드하여 중포 기지 실시간 데이터베이스 내 로컬 데이터베이스 동기화하기 위해 필요한이 활동
.
그러나 응용 프로그램을 시작할 때 fireAssistance와의 동기화가 시작 화면 후에 계속되고 mainActivity가 시작될 때 데이터가 로켈 데이터베이스에없는 것을 볼 수 있습니다. FireActron 동기화가 끝난 후 MainActivity를 시작하기위한 대상.
내 코드 :
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();
}
하지만 난이 들어 내부의 다운로드를 할 수 있도록 내가 많은 소리를 다운로드, 그래서 난 내 대답 @kingramizy 편집으로 onSuccess –
에 onPost의 코드를 이동할 수 없습니다 –