java AndroidFirebase api
我的安卓应用程序在尝试调用虚拟方法字符串时出现空指针异常错误。空对象引用上的等于(),但未给出代码中发生错误的行号,有什么问题请给我解决方案
这是我的logCat窗口错误输出
7.112 12507-12507/com.nikhil.mybvb2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nikhil.mybvb2, PID: 12507
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at 安卓.view.LayoutInflater.createViewFromTag(LayoutInflater.java:715)
at 安卓.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at 安卓.view.LayoutInflater.inflate(LayoutInflater.java:504)
at 安卓.view.LayoutInflater.inflate(LayoutInflater.java:414)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onCreateViewHolder(FirebaseRecyclerAdapter.java:167)
at 安卓.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5836)
at 安卓.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5060)
at 安卓.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4970)
at 安卓.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029)
at 安卓.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1414)
at 安卓.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377)
at 安卓.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:553)
at 安卓.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3315)
at 安卓.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2843)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1692)
at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:760)
at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1692)
at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:760)
at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at 安卓.view.View.measure(View.java:17810)
at 安卓.support.v4.widget.NestedScrollView.measureChildWithMargins(NestedScrollView.java:1411)
at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:459)
at 安卓.support.v4.widget.NestedScrollView.onMeasure(NestedScrollView.java:479)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:700)
at 安卓.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
at 安卓.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1364)
at 安卓.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:765)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:459)
at 安卓.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1692)
at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:760)
at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:459)
at 安卓.view.View.measure(View.java:17810)
at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5625)
at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1692)
at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:760)
at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at 安卓.view.View.measure(View.java:17
公共类TimelineSingleActivity扩展了AppCompatActivity{
public static class CommentViewHolder extends RecyclerView.ViewHolder {
View mView;
TextView commentText;
TextView commenterName;
CircularImageView commenterImage;
public CommentViewHolder(View itemView) {
super(itemView);
mView = itemView;
commentText = (TextView) itemView.findViewById(R.id.comment_text);
commenterName = (TextView) itemView.findViewById(R.id.commenter_name);
commenterImage = (CircularImageView) itemView.findViewById(R.id.commenterImage);
}
}
private String mPost_key = null;
//single image details
private TextView userName;
private TextView postSingleDesc;
private ImageView postSingleImage;
private FloatingActionButton fabDelet;
private NestedScrollView nestedView;
//comment Details
private String mCurrentUser;
private String mPhotoUrl;
private String userid;
private RecyclerView commentingRecyclerView;
private ImageButton sendButton;
private EditText commentText;
private FirebaseRecyclerAdapter<Comments, CommentViewHolder> mFirebaseAdapter;
private DatabaseReference mCommentingDatabase;
private DatabaseReference mDataBase;
private DatabaseReference mDatabaseUsers;
private FirebaseAuth mAuth;
private FirebaseUser firebaseUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timeline_single);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mPost_key = getIntent().getExtras().getString("post_id");
mAuth = FirebaseAuth.getInstance();
firebaseUser = mAuth.getCurrentUser();
final CollapsingToolbarLayout collapse = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
userName = (TextView) findViewById(R.id.user_onpost_name);
postSingleDesc = (TextView) findViewById(R.id.single_post_desc);
postSingleImage = (ImageView) findViewById(R.id.single_post_image);
fabDelet = (FloatingActionButton) findViewById(R.id.delete_post_btn);
mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("users");
mDatabaseUsers.keepSynced(true);
mDataBase = FirebaseDatabase.getInstance().getReference().child("timeline_pic_uploads");
mDataBase.keepSynced(true);
// userid =firebaseUser.getUid();
mDataBase.child(mPost_key).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String post_title = (String) dataSnapshot.child("title").getValue();
String post_desc = (String) dataSnapshot.child("desc").getValue();
final String post_image = (String) dataSnapshot.child("image").getValue();
String post_uid = (String) dataSnapshot.child("uid").getValue();
String post_username = (String) dataSnapshot.child("username").getValue();
userName.setText("-Posted by " + post_username);
collapse.setTitle(post_title);
postSingleDesc.setText(post_desc);
Picasso.with(TimelineSingleActivity.this).load(post_image).networkPolicy(NetworkPolicy.OFFLINE).into(postSingleImage, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
Picasso.with(TimelineSingleActivity.this).load(post_image).into(postSingleImage);
}
});
/*if (userid!=null && userid.equals(post_uid)) {
Toast.makeText(TimelineSingleActivity.this, "Errorrrrrrr", Toast.LENGTH_SHORT).show();
fabDelet.setVisibility(View.VISIBLE);
}*/
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
fabDelet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDataBase.child(mPost_key).removeValue();
Intent main = new Intent(TimelineSingleActivity.this, MainActivity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(main);
}
});
//click to image View to open new fullscreen activity
postSingleImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent fullImage = new Intent(TimelineSingleActivity.this, FullImageActivity.class);
fullImage.putExtra("image_id", mPost_key);
startActivity(fullImage);
}
});
//commenting section
commentingRecyclerView = (RecyclerView) findViewById(R.id.commenting_view);
final LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setStackFromEnd(true);
mCommentingDatabase = FirebaseDatabase.getInstance().getReference().child("comments");
mCommentingDatabase.keepSynced(true);
mFirebaseAdapter = new FirebaseRecyclerAdapter<Comments, CommentViewHolder>(
Comments.class,
R.layout.single_comment,
CommentViewHolder.class,
mCommentingDatabase) {
@Override
protected void populateViewHolder(CommentViewHolder viewHolder, Comments model, final int position) {
viewHolder.commentText.setText(model.getText());
viewHolder.commenterName.setText(model.getName());
if (model.getPhotoUrl() == null) {
viewHolder.commenterImage.setImageDrawable(ContextCompat.getDrawable(TimelineSingleActivity.this,
R.drawable.user_pic));
} else {
Picasso.with(TimelineSingleActivity.this).load(model.getPhotoUrl()).into(viewHolder.commenterImage);
}
viewHolder.mView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(TimelineSingleActivity.this, " " + position, Toast.LENGTH_LONG).show();
return false;
}
});
}
};
commentingRecyclerView.setNestedScrollingEnabled(true);
nestedView = (NestedScrollView) findViewById(R.id.nestedView);
nestedView.setSmoothScrollingEnabled(true);
mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
int countComment = mFirebaseAdapter.getItemCount();
int lastVisiblePosition = manager.findLastCompletelyVisibleItemPosition();
if (lastVisiblePosition == -1
|| (positionStart >= (countComment - 1) && lastVisiblePosition == (positionStart - 1))) {
commentingRecyclerView.smoothScrollToPosition(positionStart);
}
}
});
commentingRecyclerView.setLayoutManager(manager);
commentingRecyclerView.setAdapter(mFirebaseAdapter);
commentText = (EditText) findViewById(R.id.commentEditText);
commentText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().trim().length() > 0) {
sendButton.setEnabled(true);
sendButton.setImageResource(R.drawable.ic_send_24dp);
} else {
sendButton.setEnabled(false);
sendButton.setImageResource(R.drawable.ic_comment_24dp);
}
// commentingRecyclerView.scrollTo(commentingRecyclerView.getBottom(),commentingRecyclerView.getBottom());
}
@Override
public void afterTextChanged(Editable s) {
}
});
mDatabaseUsers.child(firebaseUser.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mPhotoUrl = (String) dataSnapshot.child("image").getValue();
mCurrentUser = (String) dataSnapshot.child("name").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
sendButton = (ImageButton) findViewById(R.id.sendButton);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Comments newComment = new Comments(commentText.getText().toString().trim(), mCurrentUser, mPhotoUrl);
mCommentingDatabase.push().setValue(newComment);
commentText.setText("");
sendButton.setImageResource(R.drawable.ic_comment_24dp);
}
});
}
} `
# 1 楼答案
实际上。。布局中出现了错误。。当您尝试在viewHolder中绑定布局时,如果自定义布局中有任何布局,则会抛出nullPointerException。。因此,在视图中添加一个^{cl1}$