Итак, у меня есть приложение, которое позволит вам создать объект java, содержащий информацию о таблетке, которую вы принимаете (имя, количество дозы, количество доз в день и количество оставшихся таблеток).Затем я сохраняю эту информацию в базе данных реального времени firebase, затем использую отдельное действие для получения информации из базы данных и сохранения ее в списке массивов, который я хочу отображать в виде списка. В настоящее время проблема заключается в том, что списокпредставление не отображает все данные списка массивов, только последний добавленный объект таблетки.
Код для загрузки данных:
package com.example.andrew.pilltracker;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.Toolbar;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.auth.*;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class SecondActvty extends AppCompatActivity {
static String ref = "Advil";
private FirebaseDatabase mFirebaseDatabase;
DatabaseReference mRootRef;
int id = 1;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
Intent intent = new Intent(SecondActvty.this, MainActivityController.class);
startActivity(intent);
return true;
case R.id.navigation_dashboard:
return true;
case R.id.navigation_notifications:
Intent intent1 = new Intent(SecondActvty.this, ThirdActivity.class);
startActivity(intent1);
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second_view);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
mFirebaseDatabase = FirebaseDatabase.getInstance();
mRootRef = mFirebaseDatabase.getReference();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//id++;
EditText pillName = (EditText)findViewById(R.id.pillName);
EditText pillDose = (EditText)findViewById(R.id.pillDose);
EditText pillCount = (EditText)findViewById(R.id.pillCount);
EditText doseDuration = (EditText)findViewById(R.id.doseDuration);
String name = pillName.getText().toString();
String dose = pillDose.getText().toString();
String day = doseDuration.getText().toString();
String count = pillCount.getText().toString();
ref = name;
Pill pill = new Pill();
pill.setName(name);
pill.setCount(count);
pill.setDay(day);
pill.setDose(dose);
if(!name.equals("") && !dose.equals("") && !day.equals("") && !count.equals("")) {
mRootRef.child("pills").child(name).setValue(pill);
toastMessage("Success!");
pillName.setText("");
pillCount.setText("");
doseDuration.setText("");
pillDose.setText("");
}
else {
toastMessage("Please fill all fields");
}
}
});
}
private void toastMessage(String message){
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
public static String getReference(){
return ref;
}
}
И класс, который будет загружать данные изFirebase и показать его в виде списка:
package com.example.andrew.pilltracker;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class MainActivityController extends AppCompatActivity {
private TextView mTextMessage;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mRootRef;
private ArrayList<String> array;
private ListView mListView;
private ArrayAdapter adapter;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
return true;
case R.id.navigation_dashboard:
Intent intent = new Intent(MainActivityController.this, SecondActvty.class);
startActivity(intent);
return true;
case R.id.navigation_notifications:
mTextMessage.setText(R.string.title_notifications);
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_view);
mListView = (ListView) findViewById(R.id.listview);
array = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array);
mFirebaseDatabase = FirebaseDatabase.getInstance();
mRootRef = mFirebaseDatabase.getReference();
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
mRootRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
mListView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void showData(DataSnapshot dataSnapshot){
for(DataSnapshot ds : dataSnapshot.getChildren()){
Pill pInfo = new Pill();
pInfo.setName(ds.child(SecondActvty.getReference().toString()).getValue(Pill.class).getName());
pInfo.setCount(ds.child(SecondActvty.getReference().toString()/*Integer.toString(databaseRef)*/).getValue(Pill.class).getCount());
pInfo.setDose(ds.child(SecondActvty.getReference().toString()).getValue(Pill.class).getDose());
pInfo.setDay(ds.child(SecondActvty.getReference().toString()).getValue(Pill.class).getDay());
array.add(pInfo.getName());
array.add("Number of Pills Left: " + pInfo.getCount());
array.add("Number of Pills per Dose: " + pInfo.getDose());
array.add("Number of Doses per Day: " + pInfo.getDay());
}
}
//Database shit
@Override
protected void onStart(){
super.onStart();
}
}
Структура базы данных: База данных