2017-04-10 2 views
0

Hallo an alle, ich habe ein Problem, das ich versucht habe, für 3 Tage zu lösen, ohne zu stoppen, aber ich kann es nicht lösen, und dies ist verzweifelt, ist es mit der StorageReference,Schlechte Erhalt der Speicherreferenz, unmöglich zu lösen

als ich rufen Sie die getReference() Methode es gibt mir ein „Standort nicht leer oder null sein muss“, aber der Punkt ist, wenn ich die Speicherreferenz gebe, und wenn sie versuchen, mit getReferenceFromUrl(), laufen zu verwenden, können Sie das Foto mit Glide erhalten oder mit Picasso, aber um zu meiner Tätigkeit zurückzukehren, erhalte ich eine Nullzeigerausnahme, die ich nicht benutzen kann. Ist dies

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

Die Fotos, die ich in der Methode setzen senden mit Erfolg kommen aber zu wollen, wenn sie zu retten, sie in einem Image mit picasso oder gleiten zu verwenden, gibt mir das Problem

Ich habe versucht, alle möglichen Wege aber es

nicht

Dies ist die Klasse arbeiten, die mir Probleme gibt. Die Ausnahme Problem ist in dem Bestücken viewHolder in der StorageRefence Linie und ich habe die Datei in der sendComment Methode

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

hier im populateVIewHolder ist das Problem in der Speicherreferenz im 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 hier sendet das Foto an die Speicher

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

Es gibt zu viel Code hier effizient zu helfen. Bitte senden Sie das [minimal-Code, der benötigt wird, um das Problem zu reproduzieren] (http://stackoverflow.com/help/mcve) (lesen Sie den Link, ist es sehr nützlich). Wenn Sie das Problem in einem einzigen Verfahren wiedergeben kann, mit nur hartcodierte Werte, wird es viel einfacher zu sehen sein, was falsch läuft. –

+0

@FrankvanPuffelen Jetzt gerade bearbeitet wurde ich und einfach den neccesary – TheQuestionerXxx

Antwort

0

ich die Lösung gefunden

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); 

        } 
Verwandte Themen