我正在尝试上传/保存3张图像&在firebase上立即进行4个文本字段。
这是我的代码:
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
。
为什么会发生这种情况?
请帮助我。
这是因为您试图将数据上传到Firebase,该数据大于所支持的最大尺寸。要解决此问题,您需要将数据上传到小软件包中,因此Firebase将接受该数据。
可能是您的成员类包含一个类型URI的字段。
uri不是firebase序列化的本地类型之一。
更改您的会员类将URI存储为字符串,然后使用uri.tostring()和uri.parse()转换。
链接到原始帖子在此。