2017-04-10 28 views
0

大家好我有一個問題,我試圖解決3天沒有停止,但我無法解決它,這是絕望的,它與StorageReference,獲取存儲引用不好,無法解決

當我打電話給getReference()方法時,它給了我一個「位置不能爲空或空的位置」,但重點是如果我給出存儲參考,並試圖與getReferenceFromUrl()一起使用時,運行,您可以使用Glide或與畢加索,但返回到我的活動我得到一個空指針異常,我不能使用它。難道這

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

,我把該方法中的照片發送成功到達,但想解救他們與畢加索或下滑的ImageView的使用它們的時候給了我這個問題

我嘗試了所有可能的方式但它不起作用

這是給我的問題的類。例外的問題是在StorageRefence行填入viewHolder,我把文件中的sendComment方法

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

這裏的populateVIewHolder的問題,在存儲的參考,在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現在我剛剛編輯它,只是把neccesary – 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); 

        }