在这个解决方案中,我可以调用void中的变量。当我试图在void之外调用它时,数据是空的。
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);
}}
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// Memasukkan data kedalam variabel username
getusername = dataSnapshot.child("username").getValue(String.class);
}
但我只想知道,为什么我的代码一开始就不能工作?谢谢。
但是我只想知道,为什么我的代码中的第一个函数不是?
您无法获得getusername
值,因为它是异步操作。数据尚未从数据库加载完毕,这就是无法访问的原因。
问题内容: 我有一类带有一些变量的类。当我在主类中实例化该类的对象时。我只能访问和修改一个方法(任何方法)中的成员变量;不在他们外面。这是为什么?我被困住了,似乎无法在Google上找到答案。 我也尝试访问说明符并得到相同的结果 问题答案: 它不起作用,因为您是在无效的Java语法的构造函数或方法之外定义实例的。 可能的解决办法是: 但是您可能要考虑保护您的类变量,例如使所有属性成为并使用和方法来
作为一个初学者,我想知道为什么我的仅在放在主块内时有效? 当我有这样的代码时,我不能调用该方法。 方法调用类: 包含以下方法的类:
我可以打印最大罚款,但我不能打印计数。我看不出max和count之间的区别,也看不出为什么它不让我打印count。感谢任何帮助
我知道string1将包含一个空字符串。我的问题是为什么像下面这样两次调用nextLine方法会出现错误:
今天在课堂上,我的老师告诉我,我不应该在python中使用全局变量,因为函数应该能够独立存在。我想我可以通过参数和返回值来实现这一点?任何帮助都会很好,谢谢。
问题内容: 当我看到以下代码无法按预期工作时,我有些困惑。 我认为Java总是通过引用将变量传递给函数。因此,为什么函数不能重新分配变量? 该程序输出。 问题答案: 对对象的引用是通过Java中的 值 传递的,因此在方法内部分配给局部变量不会更改原始变量。仅局部变量指向新字符串。稍微了解一下ASCII艺术可能会更容易理解。 最初,您有: 首次输入方法setNotNull时,您 将在中 获得null