On this post of solution, I can call the variable inside of void. When i tried to call it outside void , data is empty.
Link : I cant get the values from Firebase and put them in to TextView in fragment
I have already defined the variable as public.
EDIT :
public class FormSendActivity extends AppCompatActivity {
// form edit text
EditText email ;
EditText perihal;
EditText deskripsi;
TextView tes;
// variabel untuk menyimpan data dari edit text menjadi string
public String emails;
public String perihals;
public String deskripsis;
//variabel untuk menampung datauser sesuai login
public String getnama;
public String getusername;
FirebaseAuth firebaseAuth;
public String uid ;
Button kirim;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form_send);
email = (EditText) findViewById(R.id.editText);
perihal = (EditText) findViewById(R.id.editText2);
deskripsi = (EditText) findViewById(R.id.editText4);
kirim = (Button) findViewById(R.id.button);
tes = (TextView) findViewById(R.id.textView3);
firebaseAuth = firebaseAuth.getInstance();
uid = firebaseAuth.getCurrentUser().getUid();
dapatdatauser(uid); // here i call the method of bottom, and put in to a variabel
tes.setText(getusername); // here i put the variabel to textview to test
kirim.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
emails = email.getText().toString();
perihals = perihal.getText().toString();
deskripsis = deskripsi.getText().toString();
Sendmail sendmail = new Sendmail(emails,perihals,deskripsis);
FirebaseDatabase.getInstance().getReference("Sendmail")
.child(getusername).child("Outbox").push()
.setValue(sendmail).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(FormSendActivity.this,"Data sudah terkirim !!", Toast.LENGTH_SHORT).show();
Intent i = new Intent(FormSendActivity.this, MainActivity.class);
finish();
}else {
Toast.makeText(FormSendActivity.this,"Data gagal di kirim !!", Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
public void dapatdatauser(String iduser){
// Mendapatkan DataUsers Berdasarkan uid sesuai login
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
DatabaseReference query = reference.child("DataUsers").child(iduser);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// Memasukkan data kedalam variabel username
getusername = dataSnapshot.child("username").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
query.addListenerForSingleValueEvent(valueEventListener);
}}
So here is my full code. I am calling the method dapatdatauser first (which inside the method is set as the value of variable 'getusername') then I set the variable to textview to test it. but the output is empty.
i found a solution to put all the code in method onCreate. and do the rest inside
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// Memasukkan data kedalam variabel username
getusername = dataSnapshot.child("username").getValue(String.class);
}
but i just want to know , why my code in the first place is not working ? thank you