2017-03-27 14 views
-3

内部ループループから変数 "key"にアクセスしようとしています。しかし、できない、私は内部クラスの変数にアクセスすることについての他の投稿をチェックし、それを最終的に宣言してグローバル変数にするなどの方法に従ったが、何もしなかった。Android:変数内外ループへのアクセス

以下のコードを確認してください。

次のコードでは、ループ内のユーザーキーのトーストメッセージを見ることができます。ループ外のHowevverトーストメッセージが空の文字列を示しています。

private DatabaseReference mDatabaseUserDetails; 

public static String key = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_account); 

    --- some code --- 

    mDatabaseUserID = DatabaseUtils.getDatabase().getReference().child("Users").child(user_id); 

    mDatabaseUserID.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for(DataSnapshot accountSnapshot: dataSnapshot.getChildren()){ 

       key = accountSnapshot.getKey().toString(); 
       Toast.makeText(getApplicationContext(), key, Toast.LENGTH_LONG).show(); 


      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

    Toast.makeText(getApplicationContext(), key, Toast.LENGTH_LONG).show(); 

Basically I need this key

+0

メソッドが呼び出されたときにキーの値が変更されていないので、トーストに空の文字列のみが表示されます。ここでは実行の順序が重要です –

+0

firebaseデータベースを入れてください –

+0

実際にループ内のポストトースト値は、外側にあるトーストとしてループが値を返さないことを示します。 ここでの主なポイントはキー値を取得することです。 – Bala

答えて

1

ループがまだ実行されていないため。ループは値イベントリスナーにあります。後でDatabaseReferenceが呼び出すまで実行されません。

関連する問題