应用崩溃,在Firebase上保存数据时出现'java.lang.StackOverflowError: stack size 8MB'错误



我正在尝试上传/保存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()转换。

链接到原始帖子在此。

相关内容

  • 没有找到相关文章

最新更新