无法从firebase数据库获取数据

l3zydbqr  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(291)

我正在创建一个应用程序,现在我正在使用recyclerview显示存储在firebase数据库中的所有用户帖子。但我有一个问题,当程序从名为location、title和days的字符串接收数据时,会抛出空指针异常。您可以在下面看到代码:
后内容:

  1. public class PostContent {
  2. String days, description, difficulty, imageUri, kilometers, location, map, nickname,
  3. time, title, uid;
  4. Long numOfImages;
  5. public PostContent()
  6. {
  7. }
  8. public PostContent(String days, String description, String difficulty, String imageUri, String kilometers, String location, String map, String nickname, String time, String title, String uid, Long numOfImages) {
  9. this.days = days;
  10. this.description = description;
  11. this.difficulty = difficulty;
  12. this.imageUri = imageUri;
  13. this.kilometers = kilometers;
  14. this.location = location;
  15. this.map = map;
  16. this.nickname = nickname;
  17. this.time = time;
  18. this.title = title;
  19. this.uid = uid;
  20. this.numOfImages = numOfImages;
  21. }
  22. public String getDays() {
  23. return days;
  24. }
  25. public void setDays(String days) {
  26. this.days = days;
  27. }
  28. public String getDescription() {
  29. return description;
  30. }
  31. public void setDescription(String description) {
  32. this.description = description;
  33. }
  34. public String getDifficulty() {
  35. return difficulty;
  36. }
  37. public void setDifficulty(String difficulty) {
  38. this.difficulty = difficulty;
  39. }
  40. public String getImageUri() {
  41. return imageUri;
  42. }
  43. public void setImageUri(String imageUri) {
  44. this.imageUri = imageUri;
  45. }
  46. public String getKilometers() {
  47. return kilometers;
  48. }
  49. public void setKilometers(String kilometers) {
  50. this.kilometers = kilometers;
  51. }
  52. public String getLocation() {
  53. return location;
  54. }
  55. public void setLocation(String location) {
  56. this.location = location;
  57. }
  58. public String getMap() {
  59. return map;
  60. }
  61. public void setMap(String map) {
  62. this.map = map;
  63. }
  64. public String getNickname() {
  65. return nickname;
  66. }
  67. public void setNickname(String nickname) {
  68. this.nickname = nickname;
  69. }
  70. public String getTime() {
  71. return time;
  72. }
  73. public void setTime(String time) {
  74. this.time = time;
  75. }
  76. public String getTitle() {
  77. return title;
  78. }
  79. public void setTitle(String title) {
  80. this.title = title;
  81. }
  82. public String getUid() {
  83. return uid;
  84. }
  85. public void setUid(String uid) {
  86. this.uid = uid;
  87. }
  88. public Long getNumOfImages() {
  89. return numOfImages;
  90. }
  91. public void setNumOfImages(Long numOfImages) {
  92. this.numOfImages = numOfImages;
  93. }

postsadapter:在这里您可以看到注解掉的代码,因为从数据库接收数据时问题就出现在这些行中

  1. public class PostAdapter extends FirebaseRecyclerAdapter<PostContent, PostAdapter.postsViewHolder> {
  2. private Context mContext;
  3. public PostAdapter(FirebaseRecyclerOptions<PostContent> options) {
  4. super(options);
  5. }
  6. @Override
  7. protected void onBindViewHolder(@NonNull PostAdapter.postsViewHolder holder, int position, @NonNull PostContent model) {
  8. holder.nickname.setText(model.getNickname());
  9. holder.country.setText(model.getLocation());
  10. //holder.title.setText(model.getTitle());
  11. //holder.days.setText(model.getDays());
  12. holder.difficulty.setText(model.getDifficulty());
  13. //holder.kilometers.setText(model.getKilometers());
  14. holder.description.setText(model.getDescription());
  15. Picasso.get().load(model.getImageUri()).into(holder.avatarUri);
  16. }
  17. @NonNull
  18. @Override
  19. public PostAdapter.postsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  20. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.posts, parent, false);
  21. return new PostAdapter.postsViewHolder(view);
  22. }
  23. class postsViewHolder extends RecyclerView.ViewHolder
  24. {
  25. CircleImageView avatarUri;
  26. TextView nickname, country, title, days, difficulty, likesNum, kilometers,description;
  27. SliderView mSliderView;
  28. ImageView likes, comments, save;
  29. ImageButton more;
  30. public postsViewHolder(@NonNull View view)
  31. {
  32. super(view);
  33. avatarUri = view.findViewById(R.id.post_profile_picture);
  34. nickname = view.findViewById(R.id.post_nickname);
  35. country = view.findViewById(R.id.post_country);
  36. title = view.findViewById(R.id.post_title);
  37. days = view.findViewById(R.id.post_days);
  38. difficulty = view.findViewById(R.id.post_difficulty);
  39. mSliderView = view.findViewById(R.id.images_posts);
  40. likes = view.findViewById(R.id.post_likes);
  41. comments = view.findViewById(R.id.post_comments);
  42. save = view.findViewById(R.id.post_save);
  43. likesNum = view.findViewById(R.id.post_likes_number);
  44. description = view.findViewById(R.id.post_description);
  45. more = view.findViewById(R.id.post_more);
  46. kilometers = view.findViewById(R.id.post_distance);
  47. }
  48. }
  49. }

homefragment:

  1. public class HomeFragment extends Fragment {
  2. private RecyclerView mRecyclerView;
  3. private Context mContext;
  4. private FirebaseMethods mFirebaseMethods;
  5. private List<PostContent> mPostContentList;
  6. private PostAdapter mPostAdapter;
  7. private DatabaseReference postRef;
  8. private FirebaseAuth mAuth;
  9. private String currentUserID;
  10. public HomeFragment() {
  11. }
  12. public static HomeFragment newInstance(String param1, String param2) {
  13. HomeFragment fragment = new HomeFragment();
  14. Bundle args = new Bundle();
  15. fragment.setArguments(args);
  16. return fragment;
  17. }
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. }
  22. @Override
  23. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  24. Bundle savedInstanceState) {
  25. View view = inflater.inflate(R.layout.fragment_home, container, false);
  26. mContext = container.getContext();
  27. mFirebaseMethods = new FirebaseMethods(mContext);
  28. mRecyclerView = view.findViewById(R.id.posts_recycler);
  29. DatabaseReference postRef = FirebaseDatabase.getInstance().getReference("Posts");
  30. postRef = FirebaseDatabase.getInstance().getReference().child("Posts");
  31. mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
  32. FirebaseRecyclerOptions options =
  33. new FirebaseRecyclerOptions.Builder<PostContent>()
  34. .setQuery(FirebaseDatabase.getInstance().getReference().child("Posts"), PostContent.class)
  35. .build();
  36. mPostAdapter = new PostAdapter(options);
  37. mRecyclerView.setAdapter(mPostAdapter);
  38. return view;
  39. }
  40. @Override
  41. public void onStart() {
  42. super.onStart();
  43. mPostAdapter.startListening();
  44. }
  45. @Override
  46. public void onStop() {
  47. super.onStop();
  48. mPostAdapter.stopListening();
  49. }
  50. }

firebase数据库:
结构
日志:

  1. Process: com.company.android.myapplication, PID: 6989
  2. java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
  3. at com.company.android.myapplication.PostAdapter.onBindViewHolder(PostAdapter.java:41)
  4. at com.company.android.myapplication.PostAdapter.onBindViewHolder(PostAdapter.java:28)
  5. at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:149)
  6. at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7254)
  7. at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7337)
  8. at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6194)
  9. at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6460)
  10. at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300)
  11. at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296)
  12. at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330)
  13. at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1631)
  14. at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591)
  15. at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:668)
  16. at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309)
  17. at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012)
  18. at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578)
  19. at android.view.View.layout(View.java:22114)
  20. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  21. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:334)
  22. at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  23. at android.view.View.layout(View.java:22114)
  24. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  25. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:334)
  26. at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  27. at android.view.View.layout(View.java:22114)
  28. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  29. at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1855)
  30. at android.view.View.layout(View.java:22114)
  31. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  32. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:334)
  33. at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  34. at android.view.View.layout(View.java:22114)
  35. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  36. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1839)
  37. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1683)
  38. at android.widget.LinearLayout.onLayout(LinearLayout.java:1592)
  39. at android.view.View.layout(View.java:22114)
  40. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  41. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:334)
  42. at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  43. at android.view.View.layout(View.java:22114)
  44. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  45. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1839)
  46. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1683)
  47. at android.widget.LinearLayout.onLayout(LinearLayout.java:1592)
  48. at android.view.View.layout(View.java:22114)
  49. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  50. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:334)
  51. at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  52. at com.android.internal.policy.DecorView.onLayout(DecorView.java:937)
  53. at android.view.View.layout(View.java:22114)
  54. at android.view.ViewGroup.layout(ViewGroup.java:6335)
  55. at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3282)
  56. 2021-07-27 16:08:54.344 6989-6989/com.company.android.myapplication E/AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2782)
  57. at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1854)
  58. at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8086)
  59. at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1057)
  60. at android.view.Choreographer.doCallbacks(Choreographer.java:875)
  61. at android.view.Choreographer.doFrame(Choreographer.java:776)
  62. at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1042)
  63. at android.os.Handler.handleCallback(Handler.java:888)
  64. at android.os.Handler.dispatchMessage(Handler.java:100)
  65. at android.os.Looper.loop(Looper.java:213)
  66. at android.app.ActivityThread.main(ActivityThread.java:8178)
  67. at java.lang.reflect.Method.invoke(Native Method)
  68. at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
  69. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题