私は同じオブジェクトを使用する2つの方法を持っています。私の条件を実行するためにオブジェクトがnullでないのを待ってください。
Object A;
public void methodA() {
//Client code talks to server, create data, and instantiate A.
A = new A();
}
public void methodB() {
if(A!=null) {
//do something
}
}
これは私が達成しようとしているが、私は方法Aにオブジェクトをインスタンス化していた瞬間に、私のアプリは、サーバーに話していると、そのオブジェクトのためのデータを作成するものに単純化されたロジックです私のアプリが実行されているときメソッドB()、ObjectAがnullです。
私のアプリケーションをデバッグするときに、ObjectAにインスタンスがあり、デバッグが遅いプロセスであるため、methodB()が正しく実行されますが、実行時にObjectAがヌル。私は、通知と待機を使用しようとしましたが、私は私のアプリがクラッシュするようにnullを返すので、同期ブロックで私のobjectAを設定することができません。
EDIT:私の現在のコードの追加:サーバがfirebaseUserインスタンスを作成する前methodBが実行されているので
//Firebase Authentication
private FirebaseAuth mAuth;
//Database reference
private DatabaseReference databaseReference;
public void methodA() {
mAuth.createUserWithEmailAndPassword(
getUserEmailAddress(), getUserPassword())
.addOnCompleteListener(ActivityA.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "createUserWithEmailAndPassword: onComplete" + task.isSuccessful());
if (!task.isSuccessful()) {
Toast.makeText(ActivityA.this, "authentication failed",
Toast.LENGTH_LONG).show();
}
}
});
}
public void methodB() {
if (mAuth.getCurrentUser() != null) {
databaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInformation);
}
}
mAuth.getCurrentUser()はnullを返すされています。より高いレベルの技術が同様にありますがあなたは、wait()/notify()
でこれを行うことができ
ここでは、methodAがAをインスタンス化するか、サーバーが応答するときにA非同期メソッドでインスタンス化されるかは実際に表示されていますか? –
@ JemarJonesので、サーバーがuserIdを作成し、それが私のオブジェクトです。私は 'A = new A();'を入れて説明しましたが、実際にはサーバ側で起こっています。 –
私はあなたがここで最高の解決方法を決定するのに役立つもっと詳細なものを見る必要があると思うと思います –