3 개의 이미지를 업로드/저장하려고합니다. & 4 개의 텍스트 필드를 모두 firebase에 한꺼번에 업로드하려고합니다.firebase에 데이터를 저장하는 중 'java.lang.StackOverflowError : stack size 8MB'오류가 발생합니다.
여기 내 코드입니다 :
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();
}
이미지와 3 개 텍스트 필드가 성공적으로 저장지고 있지만 위의 지정된 행의 코드에 도달하면, 응용 프로그램 충돌이 오류가주는 생각 : java.lang.StackOverflowError: stack size 8MB
합니다.
왜 이런 일이 발생합니까?
도와주세요.
https://stackoverflow.com/questions/41567576/error-java-lang-stackoverflowerror-when-try-to-save-object-in-firebase-databa –
@NovoLucas 이것은 효과가 있습니다. 원하는 경우 여기에 답변을 게시 할 수 있습니다. 나는 그것을 받아 들일 것이고 upvote. –