将数据从Firebase添加到Android中的ListView。

huangapple go评论108阅读模式
英文:

Adding data from firebase to listview in android

问题

以下是你提供的内容的翻译部分:

  1. 我正在尝试将Firebase中的数据添加到Android中的ListView然而在向ListView中添加数据时遇到了问题并且当我打开页面时应用崩溃了我试图显示的数据是用户在当前日期所吃的食物就像这张图片中的用户吃了5个苹果和1个白面包
  2. 代码如下
  3. public class Breakfast extends AppCompatActivity {
  4. // ...(省略其他声明)
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_breakfast);
  9. // ...(省略其他初始化代码)
  10. listView = (ListView)findViewById(R.id.listView);
  11. arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, list);
  12. listView.setAdapter(arrayAdapter);
  13. // ...(省略其他代码)
  14. databaseReference.addChildEventListener(new ChildEventListener() {
  15. @Override
  16. public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String previousChildName) {
  17. String value = dataSnapshot.getValue(UserFoodInfo.class).toString();
  18. list.add(value);
  19. arrayAdapter.notifyDataSetChanged();
  20. }
  21. // ...(省略其他监听事件的方法)
  22. });
  23. }
  24. }
  25. 用户食物类
  26. public class UserFoodInfo {
  27. public String calories;
  28. public String food_amount;
  29. // ...(省略其他构造方法和方法)
  30. public String toString(){
  31. return this.calories + "." + food_amount;
  32. }
  33. }

崩溃日志:

  1. E/ArrayAdapter: 必须为TextView提供资源ID
  2. D/AndroidRuntime: 正在关闭虚拟机
  3. E/AndroidRuntime: 致命异常: main
  4. 进程: com.example.test1, PID: 7639
  5. java.lang.IllegalStateException: ArrayAdapter要求资源IDTextView
  6. at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)
  7. // ...(省略其他堆栈跟踪信息)
英文:

I'm trying to add data from firebase to listview in android. However, I'm having trouble adding data to the Listview and it crashes when I open the page. The data I'm trying to show is the food that was eaten by the user on the current date, like in this picture the user ate 5 apples and 1 white bread.
将数据从Firebase添加到Android中的ListView。

code here:

  1. public class Breakfast extends AppCompatActivity {
  2. private Button button1;
  3. private FirebaseAuth firebaseAuth;
  4. private FirebaseDatabase firebaseDatabase;
  5. private DatabaseReference databaseReference;
  6. private ListView listView;
  7. private ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();
  8. private ArrayAdapter&lt;String&gt; arrayAdapter;
  9. private Calendar calendar;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_breakfast);
  14. calendar = Calendar.getInstance();
  15. final String currentDate = DateFormat.getDateInstance().format(calendar.getTime());
  16. firebaseDatabase = FirebaseDatabase.getInstance();
  17. databaseReference = firebaseDatabase.getReference(firebaseAuth.getUid()).child(&quot;food&quot;).child(currentDate);
  18. listView = (ListView)findViewById(R.id.listView);
  19. arrayAdapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_list_item_2, list);
  20. listView.setAdapter(arrayAdapter);
  21. final FirebaseUser user=firebaseAuth.getCurrentUser();
  22. databaseReference.addChildEventListener(new ChildEventListener() {
  23. @Override
  24. public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String previousChildName) {
  25. String value = dataSnapshot.getValue(UserFoodInfo.class).toString();
  26. list.add(value);
  27. arrayAdapter.notifyDataSetChanged();
  28. }
  29. @Override
  30. public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
  31. }
  32. @Override
  33. public void onChildRemoved(@NonNull DataSnapshot snapshot) {
  34. }
  35. @Override
  36. public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
  37. }
  38. @Override
  39. public void onCancelled(@NonNull DatabaseError error) {
  40. }
  41. });

user food class:

  1. public class UserFoodInfo {
  2. public String calories;
  3. public String food_amount;
  4. public UserFoodInfo() {
  5. }
  6. public UserFoodInfo(String calories, String food_amount){
  7. this.calories = calories;
  8. this.food_amount = food_amount;
  9. }
  10. public String getCalories() {
  11. return calories;
  12. }
  13. public String getFood_amount() {
  14. return food_amount;
  15. }
  16. public String toString(){
  17. return this.calories + &quot;.&quot; + food_amount;
  18. }

crash log:

  1. E/ArrayAdapter: You must supply a resource ID for a TextView
  2. D/AndroidRuntime: Shutting down VM
  3. E/AndroidRuntime: FATAL EXCEPTION: main
  4. Process: com.example.test1, PID: 7639
  5. java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
  6. at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)
  7. at android.widget.ArrayAdapter.getView(ArrayAdapter.java:371)
  8. at android.widget.AbsListView.obtainView(AbsListView.java:2491)
  9. at android.widget.ListView.makeAndAddView(ListView.java:2018)
  10. at android.widget.ListView.fillDown(ListView.java:721)
  11. at android.widget.ListView.fillFromTop(ListView.java:782)
  12. at android.widget.ListView.layoutChildren(ListView.java:1750)
  13. at android.widget.AbsListView.onLayout(AbsListView.java:2249)
  14. at android.view.View.layout(View.java:17838)
  15. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  16. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
  17. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
  18. at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
  19. at android.view.View.layout(View.java:17838)
  20. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  21. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
  22. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
  23. at android.widget.ScrollView.onLayout(ScrollView.java:1562)
  24. at android.view.View.layout(View.java:17838)
  25. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  26. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
  27. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
  28. at android.view.View.layout(View.java:17838)
  29. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  30. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
  31. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
  32. at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
  33. at android.view.View.layout(View.java:17838)
  34. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  35. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
  36. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
  37. at android.view.View.layout(View.java:17838)
  38. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  39. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
  40. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
  41. at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
  42. at android.view.View.layout(View.java:17838)
  43. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  44. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
  45. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
  46. at com.android.internal.policy.DecorView.onLayout(DecorView.java:751)
  47. at android.view.View.layout(View.java:17838)
  48. at android.view.ViewGroup.layout(ViewGroup.java:5754)
  49. at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2698)
  50. at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2371)
  51. at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1462)
  52. at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6960)
  53. at android.view.Choreographer$CallbackRecord.run(Choreographer.java:907)
  54. at android.view.Choreographer.doCallbacks(Choreographer.java:709)
  55. at android.view.Choreographer.doFrame(Choreographer.java:644)
  56. at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:893)
  57. at android.os.Handler.handleCallback(Handler.java:836)
  58. at android.os.Handler.dispatchMessage(Handler.java:103)
  59. at android.os.Looper.loop(Looper.java:208)
  60. at android.app.ActivityThread.main(ActivityThread.java:6267)
  61. at java.lang.reflect.Method.invoke(Native Method)
  62. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
  63. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
  64. Caused by: java.lang.ClassCastException: android.widget.TwoLineListItem cannot be cast to android.widget.TextView
  65. at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:388)
  66. at android.widget.ArrayAdapter.getView(ArrayAdapter.java:371)&#160;
  67. at android.widget.AbsListView.obtainView(AbsListView.java:2491)&#160;
  68. at android.widget.ListView.makeAndAddView(ListView.java:2018)&#160;
  69. at android.widget.ListView.fillDown(ListView.java:721)&#160;
  70. at android.widget.ListView.fillFromTop(ListView.java:782)&#160;
  71. at android.widget.ListView.layoutChildren(ListView.java:1750)&#160;
  72. at android.widget.AbsListView.onLayout(AbsListView.java:2249)&#160;
  73. at android.view.View.layout(View.java:17838)&#160;
  74. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  75. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)&#160;
  76. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)&#160;
  77. at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)&#160;
  78. at android.view.View.layout(View.java:17838)&#160;
  79. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  80. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)&#160;
  81. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)&#160;
  82. at android.widget.ScrollView.onLayout(ScrollView.java:1562)&#160;
  83. at android.view.View.layout(View.java:17838)&#160;
  84. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  85. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)&#160;
  86. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)&#160;
  87. at android.view.View.layout(View.java:17838)&#160;
  88. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  89. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)&#160;
  90. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)&#160;
  91. at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)&#160;
  92. at android.view.View.layout(View.java:17838)&#160;
  93. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  94. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)&#160;
  95. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)&#160;
  96. at android.view.View.layout(View.java:17838)&#160;
  97. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  98. at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)&#160;
  99. at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)&#160;
  100. at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)&#160;
  101. at android.view.View.layout(View.java:17838)&#160;
  102. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  103. at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)&#160;
  104. at android.widget.FrameLayout.onLayout(FrameLayout.java:321)&#160;
  105. at com.android.internal.policy.DecorView.onLayout(DecorView.java:751)&#160;
  106. at android.view.View.layout(View.java:17838)&#160;
  107. at android.view.ViewGroup.layout(ViewGroup.java:5754)&#160;
  108. at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2698)&#160;
  109. at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2371)&#160;
  110. at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1462)&#160;
  111. at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6960)&#160;
  112. at android.view.Choreographer$CallbackRecord.run(Choreographer.java:907)&#160;
  113. at android.view.Choreographer.doCallbacks(Choreographer.java:709)&#160;
  114. at android.view.Choreographer.doFrame(Choreographer.java:644)&#160;
  115. at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:893)&#160;
  116. at android.os.Handler.handleCallback(Handler.java:836)&#160;
  117. at android.os.Handler.dispatchMessage(Handler.java:103)&#160;
  118. at android.os.Looper.loop(Looper.java:208)&#160;
  119. at android.app.ActivityThread.main(ActivityThread.java:6267)&#160;
  120. at java.lang.reflect.Method.invoke(Native Method)&#160;
  121. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)&#160;
  122. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)&#160;

答案1

得分: 0

问题出在当您初始化您的arraAdapter先生时,您需要进行更改:

  1. arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);

因为R.layout.simple_list_item_2需要两个文本视图来填充,而R.layout.simple_list_item_1只需要一个文本视图。

英文:

the issue is in when you initliaze your arraAdapter sir, you need to uchange this

  1. arrayAdapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_list_item_1, list);

becasue R.layout.simple_list_item_2 require two textviews to populate whereas R.layout.simple_list_item_1 requires one textview.

huangapple
  • 本文由 发表于 2020年9月7日 01:18:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/63766914.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定