2016-10-06 5 views
1

getFromRealm()を呼び出そうとしたときに、初めてデータを取得できないため、データを取得して再オープンする必要がありますアプリ。 私は間違った方法でそれをやっていますか?私はSqliteを使って試してみましたが、同じ問題があります。誰でも助けることができますか? 私の目標は、すぐにデータを取得し、その場で取得することです。 以下はそのコードです。Firebaseデータがすぐに取得できない

MainActivity:

public class MainActivity extends AppCompactActivity { 
private static final String TAG = "MainActivity"; 
public String mName; 
public String mEmail; 
private Realm mRealm; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mRealm = Realm.getInstance(this); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    mAuth = FirebaseAuth.getInstance(); 

    saveToRealm(); 
    getFromRealm(); 
    Log.d(TAG, "Name: " + mName); // Here show null at first open the app 
    Log.d(TAG, "Email: " + mEmail); // Here show null at first open the app 
} 
} 

これは、レルムメソッドにデータを保存している:

public void saveToRealm() { 
    ValueEventListener postListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Users details = dataSnapshot.getValue(Users.class); 
      Log.d(TAG, String.valueOf(dataSnapshot)); 

      String name = details.getName(); 
      String email = details.getEmail(); 

      details.setName(name); 
      details.setEmail(email); 

      mRealm.beginTransaction(); 
      mRealm.copyToRealmOrUpdate(details); 
      mRealm.commitTransaction(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "getUser:onCancelled", databaseError.toException()); 
     } 
    }; 
    mDatabase.child("User") 
      .child("Details") 
      .addValueEventListener(postListener); 
} 

これは、getデータ方式である:

public void getFromRealm() { 
    RealmResults<Users> results = 
      mRealm.where(Users.class).findAll(); 

    try{ 
     Users c = results.get(0); 
     mName = c.getName(); 
     mEmail = c.getEmail(); 

     } catch (Exception e) { 
     Log.e(TAG, String.valueOf(e)); 
    } 
} 

これは、オブジェクトのクラスである:

public class Users extends RealmObject { 

@PrimaryKey 
private long id; 

private String name; 
private String email; 

public Users() { 
} 

public void setId(long id) { 
    this.id = id; 
} 

public long getId() { 
    return id; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getEmail() { 
    return email; 
} 

}

+0

このレルムのバージョンは何ですか? 'Realm.getInstance(Context)'は古くから 'RealmConfiguration.Builder()'のために削除されました。 – EpicPandaForce

+0

お返事ありがとうございます。私はsqliteを使用して同じ問題があるので。バージョン管理が私の予想される結果に影響を及ぼしますか?私は領域でかなり新しいです。 – user3606920

+0

まあ0.89.0には重大な変更がありましたが、0.89.0に行くと1.1.1(または1.2.0)になる可能性があります。 – EpicPandaForce

答えて

1

それはあなたが保存のみいつでも後にデータを取得firebaseデータからデータを取得するためにいつか秒のようになりますと、あなたがこのような店の何か..

public void saveToRealm() { 
    ValueEventListener postListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Users details = dataSnapshot.getValue(Users.class); 
      Log.d(TAG, String.valueOf(dataSnapshot)); 

      String name = details.getName(); 
      String email = details.getEmail(); 

      details.setName(name); 
      details.setEmail(email); 

      mRealm.beginTransaction(); 
      mRealm.copyToRealmOrUpdate(details); 
      mRealm.commitTransaction(); 

      getFromRealm(); 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "getUser:onCancelled", databaseError.toException()); 
     } 
    }; 
    mDatabase.child("User") 
      .child("Details") 
      .addValueEventListener(postListener); 
} 

どこからデータを取得します。

この方法のように、あなたのデータを取得してください。..

public void getFromRealm() { 
    RealmResults<Users> results = mRealm.where(Users.class).findAll(); 
     try { 
       for(int i=0;i<results.size();i++){ 

       mName = results.get(i).getName(); 
       mEmail = results.get(i).getEmail(); 

      } 
     } catch (Exception e) { 
       Log.e(TAG, String.valueOf(e)); 
     } 
    } 
+0

返信ありがとうLog.d(TAG、mName);を実行してください。メソッドsaveToRealm()の外側ではまだnullのままです。 – user3606920

+0

次に、Firebaseからデータを取得していることを確認しますか? –

+0

私はfirebaseから取得することができます、私はメソッドの内部にログを持っていますが、私はメソッドの後に取得しようとするとnullです。 – user3606920

関連する問題