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
nichtDies 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();
}
});
}
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. –
@FrankvanPuffelen Jetzt gerade bearbeitet wurde ich und einfach den neccesary – TheQuestionerXxx