2017-04-10 2 views
0

안녕하세요. 멈추지 않고 3 일 동안 풀려고했는데 해결할 수없는 문제가 있습니다. 이건 절망적입니다. StorageReference와 함께라면저장 참조를 가져올 수 없음, 해결할 수 없음

getReference() 메서드를 호출하면 나에게 "위치가 비어 있거나 null이 아니어야합니다."라는 메시지가 표시되지만 저장 참조 번호를 지정하면 getReferenceFromUrl()과 함께 사용하려고 할 때 Glide로 사진을 가져올 수 있습니다 또는 picasso하지만 내 활동으로 돌아가려면 널 포인터 예외가 생겨서 사용할 수 없다. 나는 방법에 넣어이

"java.lang.NullPointerException: Attempt to invoke virtual method 
'java.lang.String android.net.Uri.getLastPathSegment()' on a null object 
reference" 

사진은 성공에 도착 보내하지만 피카소 나 글라이드와 이미지 뷰에서 사용하도록 구출하고자 할 때 모든 가능한 내게 시도 그 문제

을 준다 방법은 작동하지만 작동하지 않습니다.

이것은 저에게 문제가되는 클래스입니다. 예외 문제가 StorageRefence 라인에 채우기 viewHolder이고 I는 sendComment있어서 여기 populateVIewHolder에

private void initCommentSection() { 
     RecyclerView commentRecyclerView = (RecyclerView) findViewById(R.id.comment_recyclerview); 
     commentRecyclerView.setLayoutManager(new LinearLayoutManager(CommentActivity.this)); 

에 파일을 넣어 문제가 getLastPathSegment(), 저장 기준에서,

 FirebaseRecyclerAdapter<Comment, CommentHolder> commentAdapter = 
       new FirebaseRecyclerAdapter<Comment, CommentHolder>(
         Comment.class, 
         R.layout.row_comment, 
         CommentHolder.class, 
         FirebaseUtils.getCommentRef(mPost.getPostId())) { 
        @Override 
        protected void populateViewHolder(final CommentHolder viewHolder, Comment model, int position) { 
         viewHolder.setUsername(mUser.getUsername()); 
         viewHolder.setComment(model.getComment()); 
         viewHolder.setTime(DateUtils.getRelativeTimeSpanString(model.getTimeCreated())); 



         StorageReference sdsd = FirebaseStorage.getInstance().getReferenceFromUrl(FirebaseUtils.getCommentsImagesRef().child(mSelectedImageUri.getLastPathSegment()).toString()); 
         sdsd.getDownloadUrl().addOnSuccessListener(CommentActivity.this, new OnSuccessListener<Uri>() { 
          @Override 
          public void onSuccess(Uri uri) { 
          Picasso.with(CommentActivity.this).load(uri).into(viewHolder.imageBetaComm); 
          } 
         }); 

         if(mSelectedImageUri == null){ 
          StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl("https://firebasestorage.googleapis.com/v0/b/memetics-e9fac.appspot.com/o/bite_carpet%2Fbite.png?alt=media&token=36b90aed-5448-4493-836a-ad5554848820"); 
          storageReference.getDownloadUrl().addOnSuccessListener(CommentActivity.this, new OnSuccessListener<Uri>() { 
           @Override 
           public void onSuccess(Uri uri) { 
           Picasso.with(CommentActivity.this).load(uri).into(viewHolder.imageBetaComm); 
           } 
          }); 
         } 








        } 
       }; 

     commentRecyclerView.setAdapter(commentAdapter); 
    } 

여기 ans와 나는 해결책을 발견

private void sendComment() { 
     final ProgressDialog progressDialog = new ProgressDialog(CommentActivity.this); 
     progressDialog.setMessage("Sending comment.."); 
     progressDialog.setCancelable(true); 
     progressDialog.setIndeterminate(true); 
     progressDialog.show(); 

     final String uid = FirebaseUtils.getUid(); 
     final String strComment = mCommentEditTextView.getText().toString(); 




     FirebaseUtils.getUserRef(FirebaseUtils.getCurrentUser().getEmail().replace(".", ",")) 
       .addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         User user = dataSnapshot.getValue(User.class); 


         if(mSelectedImageUri != null){ 
          mComent.setUser(user); 
          mComent.setCommentId(uid); 
          mComent.setComment(strComment); 
          mComent.setTimeCreated(System.currentTimeMillis()); 
          FirebaseUtils.getCommentsImagesRef().child(mSelectedImageUri.getLastPathSegment()).putFile(mSelectedImageUri); 
         }else{ 
          mComent.setUser(user); 
          mComent.setCommentId(uid); 
          mComent.setComment(strComment); 
          mComent.setTimeCreated(System.currentTimeMillis()); 
         } 



         FirebaseUtils.getCommentRef(mPost.getPostId()) 
           .child(uid) 
           .setValue(mComent); 
         FirebaseUtils.getMyCommentRef().child(uid).setValue(true); 
         FirebaseUtils.addToMyRecord(Constants.COMMENTS_KEY, uid); 



         FirebaseUtils.getPostRef().child(mPost.getPostId()) 
           .child("numComments") 
           .runTransaction(new Transaction.Handler() { 
            @Override 
            public Transaction.Result doTransaction(MutableData mutableData) { 
             long num = (long) mutableData.getValue(); 
             mutableData.setValue(num + 1); 
             return Transaction.success(mutableData); 
            } 

            @Override 
            public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { 
             progressDialog.dismiss(); 
             FirebaseUtils.addToMyRecord(Constants.COMMENTS_KEY,uid); 
            } 
           }); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 
         progressDialog.dismiss(); 
        } 
       }); 
    } 
+0

효율적으로 사용할 수있는 코드가 너무 많습니다. [문제를 재현하는 데 필요한 최소한의 코드] (http://stackoverflow.com/help/mcve)를 게시하십시오 (링크를 읽으면 매우 유용합니다). 하드 코딩 된 값을 사용하여 단일 메서드로 문제를 재현 할 수 있다면 문제의 원인을 쉽게 파악할 수 있습니다. –

+0

@FrankvanPuffelen 이제 막 편집 했으니까요. – TheQuestionerXxx

답변

0

저장에 사진을 전송

if(mSelectedImageUri != null){ 
         mComent.setUser(user); 
         mComent.setCommentId(uid); 
         mComent.setComment(strComment); 
         mComent.setTimeCreated(System.currentTimeMillis()); 
         FirebaseUtils.getCommentsImagesRef().child(mSelectedImageUri.getLastPathSegment()).putFile(mSelectedImageUri).addOnSuccessListener(CommentActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() { 
          @Override 
          public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
           String url = Constants.COMMENT_IMAGES + "/" + mSelectedImageUri.getLastPathSegment(); 
           mComent.setPhotoCommentUrl(url); 
           FirebaseUtils.getCommentRef(mPost.getPostId()) 
             .child(uid) 
             .setValue(mComent); 
           FirebaseUtils.getMyCommentRef().child(uid).setValue(true); 
           FirebaseUtils.addToMyRecord(Constants.COMMENTS_KEY, uid); 



          } 
         }); 
        }else{ 
         mComent.setUser(user); 
         mComent.setCommentId(uid); 
         mComent.setComment(strComment); 
         mComent.setTimeCreated(System.currentTimeMillis()); 
         String urlnull = Constants.PHOTO_COMMENT_ROW + "/" + "bite.png"; 
         mComent.setPhotoCommentUrl(urlnull); 
         FirebaseUtils.getCommentRef(mPost.getPostId()) 
           .child(uid) 
           .setValue(mComent); 
         FirebaseUtils.getMyCommentRef().child(uid).setValue(true); 
         FirebaseUtils.addToMyRecord(Constants.COMMENTS_KEY, uid); 

        }