android - 在 firebase 上保存数据时应用程序崩溃并出现 'java.lang.StackOverflowError: stack size 8MB' 错误

标签 android firebase-realtime-database runtime-error stack-overflow firebase-storage

<分区>

我正在尝试在 firebase 上同时上传/保存 3 张图片和 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 接受该数据。

关于android - 在 firebase 上保存数据时应用程序崩溃并出现 'java.lang.StackOverflowError: stack size 8MB' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46523749/

相关文章:

android - TextView 旋转保持宽度和高度

java - 如何将数据库引用(来自回调)传递给 FirebaseRecyclerAdapter

java - Java 中收到非法表达式开始错误

android - “Obsolete custom lint check” 来自 `androidx.appcompat.AppCompatIssueRegistry`,这需要更新的 API 级别

java.lang.ClassCastException : android. os.BinderProxy 无法转换为 com.leonard.sg.okcoin.service.SyncAndTradeService$SyncAndTradeBinder

Android Intent 清除顶部不起作用

javascript - 代码中未包含涉及值的Javascript运行时错误

android - 无法从 Firebase 读取

android - 上传到数据库时 Firebase 存储出错

java - Java 中的 NoClassDefFoundError : com/google/common/base/Function