在我的FirebaseHelper.java文件中,Log.i是arrayList,但它在返回之前显示为空。 有人能为我指出正确的方向吗?当期望返回数据时,Android/Java ArrayList为空
我的代码的相关部分: 公共类今天扩展AppCompatActivity实现OnItemSelectedListener {
// Variables for the DrawLayout:
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;
private Toolbar mToolbar;
// Firebase variables:
private DatabaseReference mDatabase;
private ChildEventListener mChildEventListener;
private DatabaseReference mDatabaseExercisesToday;
// Firebase spinner:
FirebaseHelper helper;
// For storing username such as [email protected]:
String mUsername;
Spinner spinnerExercises;
TextView textViewSpinner;
private String[] exerciseArray;
private ArrayList<String> exerciseArrayList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_today);
// Create instance of Firebase database root:
mDatabase = FirebaseDatabase.getInstance().getReference();
// Get a instance of Firebase database starting at today's date:
mDatabaseExercisesToday = FirebaseDatabase.getInstance().getReference("2-14-17");
/***** Connect UI elements with code: *****/
mToolbar = (Toolbar) findViewById(R.id.nav_action);
mDrawerLayout = (DrawerLayout) findViewById(R.id.activity_today);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
// Pass our database instance to the Firebase Helper class for spinner:
helper = new FirebaseHelper(mDatabaseExercisesToday);
exerciseArrayList = helper.retrieve();
Log.i("ArrayList: ", exerciseArrayList.toString());
exerciseArray = new String[exerciseArrayList.size()];
exerciseArray = exerciseArrayList.toArray(exerciseArray);
// Spinner:
spinnerExercises = (Spinner) findViewById(R.id.spinner_Exercises2);
textViewSpinner = (TextView) findViewById(R.id.textView_spinner2);
ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, exerciseArray);
adapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerExercises.setAdapter(adapter_state);
spinnerExercises.setOnItemSelectedListener(this);
FireBaseHelper.java:
public class FirebaseHelper {
DatabaseReference db;
Boolean saved=null;
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
//SAVE
public Boolean save(Exercises exercises)
{
if(exercises==null)
{
saved=false;
}else
{
try
{
db.push().setValue(exercises);
saved=true;
}catch (DatabaseException e)
{
e.printStackTrace();
saved=false;
}
}
return saved;
}
//READ
public ArrayList<String> retrieve()
{
final ArrayList<String> exercisesArrayList=new ArrayList<>();
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot,exercisesArrayList);
Log.i("ArrayListadded1", exercisesArrayList.toString());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot,exercisesArrayList);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
//fetchDataDelete(dataSnapshot,exercisesArrayList);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
);
Log.i("ArrayListBefReturn", exercisesArrayList.toString());
return exercisesArrayList;
}
private void fetchData(DataSnapshot snapshot,ArrayList<String> exercisesArrayList)
{
exercisesArrayList.add(snapshot.getValue(Exercises.class).getExerciseName());
Log.i("ArrayList2", exercisesArrayList.toString());
}
// private void fetchDataDelete(DataSnapshot snapshot,ArrayList<String> exercisesArrayList)
// {
// // Add The exercise to our exerciseArrayList:
// exercisesArrayList.remove(snapshot.getValue(Exercises.class).getExerciseName());
//
// }
}
Exercises.java:
package christopheradams.com.workoutapp8;
import com.google.firebase.database.IgnoreExtraProperties;
/**
* Created by Christopher on 2/13/2017.
*/
@IgnoreExtraProperties
public class Exercises {
public String exerciseName;
public String reps;
public String weight;
public String username;
public Exercises(){
}
public Exercises(String exerciseName, String reps, String weight, String username){
this.exerciseName = exerciseName;
this.reps = reps;
this.weight = weight;
this.username = username;
}
public String getExerciseName() {
return exerciseName;
}
public String getReps() {
return reps;
}
public String getWeight() {
return weight;
}
public String getUsername() {
return username;
}
public void setExerciseName(String exerciseName) {
this.exerciseName = exerciseName;
}
public void setReps(String reps) {
this.reps = reps;
}
public void setWeight(String weight) {
this.weight = weight;
}
public void setUsername(String username) {
this.username = username;
}
}
而且想要添加我的ArrayList outp的Logcat UT。它整个是不是空的,除了返回前:
我正在使用Google Firebase数据库。无论何时添加或更改数据,都会调用onChildAdded和onChildChanged。但我也有一种印象,第一次加载时会调用onChildAdded,然后调用fetchData。我会更多地考虑这一点,看看这是否指向正确的方向。谢谢您的回复。 –