J'essaie de télécharger/enregistrer 3 images & 4 champs de texte à la fois sur Firebase.App s'écraser donnant erreur 'java.lang.StackOverflowError: stack 8MB' lors de l'enregistrement des données sur firebase
Voici mon code:
if (!pDescription.getText().toString().isEmpty()) {
if (!pDuration.getText().toString().isEmpty()) {
if (!pPrice.getText().toString().isEmpty()) {
if (imageArray != null) {
if (imageArray.size() > 0) {
for (int i=0; i<imageArray.size(); i++) {
Uri file = Uri.fromFile(new File(imageArray.get(i).toString()));
Log.d("CALLED", "YES1");
String key = database.getReference().push().getKey();
UploadTask uploadTask = storage.getReference().child(AccessToken.getCurrentAccessToken().getUserId()).child(key).child("p_image").putFile(file);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
@SuppressWarnings("VisibleForTests")
Uri downloadUrl = taskSnapshot.getDownloadUrl();
imageUrls.add(downloadUrl.toString());
String id = database.getReference().push().getKey();
database.getReference().child(AccessToken.getCurrentAccessToken().getUserId()).child(id).child("pDescription").setValue(pDescription.getText().toString());
database.getReference().child(AccessToken.getCurrentAccessToken().getUserId()).child(id).child("pDuration").setValue(pDuration.getText().toString());
database.getReference().child(AccessToken.getCurrentAccessToken().getUserId()).child(id).child("pPrice").setValue(pPrice.getText().toString());
if (imageUrls != null) {
for (int i=0; i<imageUrls.size(); i++) {
Log.d("imageUrlsSize", String.valueOf(imageUrls.size()));
// everything is working fine above this line
// this text is not getting saved on firebase
String idtwo = database.getReference().push().getKey();
database.getReference().child(AccessToken.getCurrentAccessToken().getUserId()).child(id).child(idtwo).child("imageUrl").setValue(downloadUrl);
}
}
Toast.makeText(getBaseContext(), "Posted successfully!", Toast.LENGTH_SHORT).show();
}
});
}
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "Upload p's image", Snackbar.LENGTH_SHORT);
snackbar.show();
}
}
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "aaa", Snackbar.LENGTH_SHORT);
snackbar.show();
}
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "bbb", Snackbar.LENGTH_SHORT);
snackbar.show();
}
} else {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "ccc", Snackbar.LENGTH_LONG);
snackbar.show();
}
Les images et les 3 champs de texte sont sauvées avec succès, mais je pense que lorsque le code dans la ligne indiquée au-dessus est atteinte, application se bloque donnant cette erreur: java.lang.StackOverflowError: stack size 8MB
.
Pourquoi cela se produit-il?
S'il vous plaît aidez-moi.
https://stackoverflow.com/questions/41567576/error-java-lang-stackoverflowerror-when-try-to-save-object-in-firebase-databa –
@NovoLucas Cela a fonctionné. Vous pouvez poster une réponse ici si vous le souhaitez. Je vais accepter et upvote. –