android - Firebase noob java.lang.NullPointerException:无法在 child() 中为参数“pathString”传递 null
问题描述
我正在尝试添加一个功能,用户可以点击所有用户列表并查看所述用户个人资料。添加此代码后,我收到此错误。数据库的图像当我点击用户列表以启动意图并且当我查看用户设置时发生错误,以前工作现在没有检索数据。
08-05 15:42:33.372 4697-4697/com.example.android.lapitchat E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.lapitchat, PID: 4697
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.lapitchat/com.example.android.lapitchat.ProfileActivity}: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2787)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1504)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Caused by: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
at com.google.firebase.database.DatabaseReference.child(Unknown Source)
at com.example.android.lapitchat.ProfileActivity.onCreate(ProfileActivity.java:38)
at android.app.Activity.performCreate(Activity.java:6757)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679)
这是我的代码的状态
public class ProfileActivity extends AppCompatActivity {
private ImageView mProfileImage;
private TextView mProfileName, mProfileStatus, mProfileFriendsCount;
private Button mProfileSendReqBtn;
private DatabaseReference mUsersDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
String user_id = getIntent().getStringExtra("user id");
mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(user_id);
mProfileImage = findViewById(R.id.profileImage);
mProfileName = findViewById(R.id.profileName);
mProfileStatus = findViewById(R.id.profileStatus);
mProfileFriendsCount = findViewById(R.id.profileFriendsCount);
mProfileSendReqBtn = findViewById(R.id.profileSendReqBtn);
mUsersDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String display_name = Objects.requireNonNull(dataSnapshot.child("name").getValue()).toString();
String status = Objects.requireNonNull(dataSnapshot.child("status").getValue()).toString();
String image = Objects.requireNonNull(dataSnapshot.child("image").getValue()).toString();
mProfileName.setText(display_name);
mProfileStatus.setText(status);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
import static com.example.android.lapitchat.R.layout.*;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_users);
mToolbar = findViewById(R.id.users_appbar);
mUsersList = findViewById(R.id.users_list);
mUsersList.hasFixedSize();
mUsersList.setLayoutManager(new LinearLayoutManager(this));
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("User");
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("All Users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onStart() {
super.onStart();
startListening();
}
public void startListening() {
Query query = FirebaseDatabase.getInstance()
.getReference()
.child("Users")
.limitToLast(50);
FirebaseRecyclerOptions<Users> options =
new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(query, Users.class)
.build();
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Users, UserViewHolder>(options) {
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new instance of the ViewHolder, in this case we are using a custom
// layout called R.layout.message for each item
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.users_single_layout, parent, false);
return new UserViewHolder(view);
}
@Override
protected void onBindViewHolder(UserViewHolder holder, int position, Users model) {// Bind the Chat object to the ChatHolder
holder.setName(model.name);
holder.setStatus(model.status);
final String user_id = getRef(position).getKey();
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent profileIntent = new Intent(UsersActivity.this, ProfileActivity.class);
profileIntent.putExtra("user_id", user_id);
startActivity(profileIntent);
}
});
}
};
mUsersList.setAdapter(adapter);
adapter.startListening();
}
public static class UserViewHolder extends RecyclerView.ViewHolder {
View mView;
public UserViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setName(String name) {
TextView userNameView = (TextView) mView.findViewById(R.id.user_single_name);
userNameView.setText(name);
}
public void setStatus(String status){
TextView statusTextView = (TextView) mView.findViewById(R.id.user_single_status);
statusTextView.setText(status);
}
}
}
解决方案
我假设这是来自 LapitChatApp 教程。如果是这样,您需要在 ProfileActivity.java 中验证是否user_id
正在传递或from_user_id
正在通过getIntent()
方法传递。您可以简单地在onCreate
方法中使用 if else 来做到这一点。
final String user_id;
String data = getIntent().getStringExtra("user_id");
if (data == null) {
user_id = getIntent().getStringExtra("from_user_id");
} else {
user_id = getIntent().getStringExtra("user_id");
}
推荐阅读
- swift - xcode swift 4数字增加动画?
- java - 类型 E 被识别为对象
- twitter-bootstrap - Bootstrap 页脚列未对齐
- postgresql - postgresql - 删除模式说模式不存在
- angularjs - 如何在 angularJS 中同时使用页面行函数和脚本函数
- node.js - AWS - MEAN App - 维护上传文件夹
- vba - 使用 VBA 在 IE 中单击一个按钮
- shoutem - Shoutem eslit 'define' 未定义 no-undef
- android - 文件上传在 Android WebView 中不起作用
- linq - 我们如何更改 Linq 表达式的 PropertyName?