2

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합니다.

왜 이런 일이 발생합니까?

도와주세요.

+1

https://stackoverflow.com/questions/41567576/error-java-lang-stackoverflowerror-when-try-to-save-object-in-firebase-databa –

+1

@NovoLucas 이것은 효과가 있습니다. 원하는 경우 여기에 답변을 게시 할 수 있습니다. 나는 그것을 받아 들일 것이고 upvote. –

답변

0

지원되는 최대 크기보다 큰 데이터를 Firebase에 업로드하려고하기 때문에 이러한 현상이 발생합니다. 이 문제를 해결하려면 작은 패키지로 데이터를 업로드해야합니다. 그러면 Firebase가 해당 데이터를 수락합니다.

0

멤버 클래스에 Uri 유형 필드가있을 수 있습니다.

Uri is not one of the native types that Firebase serializes.

문자열로 URI를 저장하도록 회원 클래스를 변경하고 변환 Uri.toString()와 Uri.parse()를 사용

.

원래 게시물의 링크는 here입니다.

관련 문제