I have a firebase helper class in which I am saving the data and also have the add child listener event setup. The problem is that, after adding a child listener event, it is not firing.
public class FbaseHelper {
DatabaseReference dbRef;
Boolean saved= null;
String codeDescJSON = null;
Gson myGson;
CodeDescMast codeDescMast;
ArrayList<CodeDescMast> cdeDescAryList;
public FbaseHelper() { }
public FbaseHelper(DatabaseReference refDb) {
this.dbRef = refDb;
}
public void read(Context context) {
String csvLine;
InputStream is=null ;
try {
is = context.getAssets().open("a.csv") ;
BufferedReader reader = new BufferedReader(new InputStreamReader(is)) ;
codeDescMast = new CodeDescMast();
while((csvLine = reader.readLine())!=null) {
String[] row = csvLine.split(",") ;
if (! row[1].equals("Desc")) {
codeDescMast.setCode(Integer.valueOf(row[0]));
codeDescMast.setDesc(row[1]);
fBaseSave();
}
}
is.close();
} catch(IOException ioex) {
ioex.printStackTrace();
}
}
public Boolean fBaseSave() {
try {
dbRef.push().setValue(codeDescMast) ;
saved = true;
}catch (DatabaseException dbEx) {
dbEx.printStackTrace();
saved = false ;
}
return saved;
}
public ArrayList<CodeDescMast> retrieve() {
dbRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
getData(dataSnapshot,cdeDescAryList);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
getData(dataSnapshot,cdeDescAryList);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return cdeDescAryList;
}
public void getData(DataSnapshot pDtSnpSht,ArrayList<CodeDescMast> pCdeDscMst) {
int code;
String desc;
pCdeDscMst.clear();
for(DataSnapshot dSnpSht : pDtSnpSht.getChildren()) {
code = dSnpSht.getValue(CodeDescMast.class).getCode() ;
desc = dSnpSht.getValue(CodeDescMast.class).getDesc() ;
CodeDescMast cdeDscMst = new CodeDescMast(code,desc);
pCdeDscMst.add(cdeDscMst) ;
}
}
This is mainactivity.java
public class MainActivity extends AppCompatActivity {
Spinner spnr;
DatabaseReference dbRef;
FbaseHelper fBaseHelp;
CdeDscAdapt cdeDscAdpt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spnr = (Spinner) findViewById(R.id.ddlbcode);
dbRef= FirebaseDatabase.getInstance().getReference() ;
fBaseHelp = new FbaseHelper(dbRef);
dbInit();
cdeDscAdpt = new CdeDscAdapt(this, fBaseHelp.cdeDescAryList) ;
spnr.setAdapter(cdeDscAdpt);
spnr.setOnItemSelectedListener(spnrItmSelListnr);
}
publ
public void dbInit() {
fBaseHelp.read(getApplicationContext());
fBaseHelp.retrieve();
}
public AdapterView.OnItemSelectedListener spnrItmSelListnr = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
CodeDescMast codeDesc = (CodeDescMast) parent.getItemAtPosition(position);
int code = codeDesc.getCode();
String desc = codeDesc.getDesc();
Toast.makeText(MainActivity.this,"Code:"+ Integer.toString(code) + "/nDesc: "+ desc ,Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
}
The question is should the listener be defined inside the main activity or can it be defined in another class.