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.
code here:
public class Breakfast extends AppCompatActivity {
private Button button1;
private FirebaseAuth firebaseAuth;
private FirebaseDatabase firebaseDatabase;
private DatabaseReference databaseReference;
private ListView listView;
private ArrayList<String> list = new ArrayList<String>();
private ArrayAdapter<String> arrayAdapter;
private Calendar calendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_breakfast);
calendar = Calendar.getInstance();
final String currentDate = DateFormat.getDateInstance().format(calendar.getTime());
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference(firebaseAuth.getUid()).child("food").child(currentDate);
listView = (ListView)findViewById(R.id.listView);
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, list);
listView.setAdapter(arrayAdapter);
final FirebaseUser user=firebaseAuth.getCurrentUser();
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String previousChildName) {
String value = dataSnapshot.getValue(UserFoodInfo.class).toString();
list.add(value);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
user food class:
public class UserFoodInfo {
public String calories;
public String food_amount;
public UserFoodInfo() {
}
public UserFoodInfo(String calories, String food_amount){
this.calories = calories;
this.food_amount = food_amount;
}
public String getCalories() {
return calories;
}
public String getFood_amount() {
return food_amount;
}
public String toString(){
return this.calories + "." + food_amount;
}
crash log:
E/ArrayAdapter: You must supply a resource ID for a TextView
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test1, PID: 7639
java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:371)
at android.widget.AbsListView.obtainView(AbsListView.java:2491)
at android.widget.ListView.makeAndAddView(ListView.java:2018)
at android.widget.ListView.fillDown(ListView.java:721)
at android.widget.ListView.fillFromTop(ListView.java:782)
at android.widget.ListView.layoutChildren(ListView.java:1750)
at android.widget.AbsListView.onLayout(AbsListView.java:2249)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at android.widget.ScrollView.onLayout(ScrollView.java:1562)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:751)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2698)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2371)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1462)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6960)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:907)
at android.view.Choreographer.doCallbacks(Choreographer.java:709)
at android.view.Choreographer.doFrame(Choreographer.java:644)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:893)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:208)
at android.app.ActivityThread.main(ActivityThread.java:6267)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
Caused by: java.lang.ClassCastException: android.widget.TwoLineListItem cannot be cast to android.widget.TextView
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:388)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:371)
at android.widget.AbsListView.obtainView(AbsListView.java:2491)
at android.widget.ListView.makeAndAddView(ListView.java:2018)
at android.widget.ListView.fillDown(ListView.java:721)
at android.widget.ListView.fillFromTop(ListView.java:782)
at android.widget.ListView.layoutChildren(ListView.java:1750)
at android.widget.AbsListView.onLayout(AbsListView.java:2249)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at android.widget.ScrollView.onLayout(ScrollView.java:1562)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1982)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1826)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1735)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:383)
at android.widget.FrameLayout.onLayout(FrameLayout.java:321)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:751)
at android.view.View.layout(View.java:17838)
at android.view.ViewGroup.layout(ViewGroup.java:5754)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2698)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2371)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1462)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6960)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:907)
at android.view.Choreographer.doCallbacks(Choreographer.java:709)
at android.view.Choreographer.doFrame(Choreographer.java:644)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:893)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:208)
at android.app.ActivityThread.main(ActivityThread.java:6267)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)