2016-04-02 28 views
2

Realm veritabanını kullanarak kullanıcı giriş ve kayıt yapmaya çalışıyorum. Birisi bana lütfen yardımcı olabilir Boş bir nesne başvurusuKayıt ve Giriş Realm Kullanarak

üzerine 'io.realm.Realm.beginTransaction() geçersiz' sanal yöntemi çağırmak için

Girişimi şu şekildedir: Ancak bir hata alıyorum? Aşağıda

benim kayıt için benim kodudur ve giriş ..

Kod Kaydı için:

İşte
public class RegisterActivity extends AppCompatActivity { 

private static final String TAG = "Register"; 
EditText mEditTextFirstName, mEditTextLastName, mEditTextEmail,mEditTextPassword,mEditTextConfirmPassword; 
Button mButtonSignUp; 
Realm realm; 
private MyRealmObject myRealmObject; 

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

    try { 
     realm = Realm.getInstance(getApplicationContext()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    mEditTextFirstName = (EditText) findViewById(R.id.edtfirstname); 
    mEditTextLastName= (EditText) findViewById(R.id.edtlastname); 
    mEditTextEmail = (EditText) findViewById(R.id.edtemail); 
    mEditTextPassword = (EditText) findViewById(R.id.edtpassword); 
    mEditTextConfirmPassword = (EditText) findViewById(R.id.edtconfirm); 
    mButtonSignUp = (Button) findViewById(R.id.btnsignup); 


    mButtonSignUp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mEditTextFirstName.length() == 0) { 
       showSnackBar("Enter FirstName"); 
       mEditTextFirstName.requestFocus(); 
      } else if (mEditTextLastName.length() == 0) { 
       showSnackBar("Enter LastName"); 
       mEditTextEmail.requestFocus(); 
      } else if (mEditTextEmail.length() ==0) { 
       showSnackBar("Enter a valid email"); 
       mEditTextEmail.requestFocus(); 
      }else if (mEditTextPassword.length() ==0) { 
       showSnackBar("Enter a valid password"); 
       mEditTextPassword.requestFocus(); 
      }else if (mEditTextConfirmPassword.length() ==0) { 
         showSnackBar("Enter a valid Password"); 
         mEditTextPassword.requestFocus(); 
      } else { 

       try{ 

        realm.beginTransaction(); 

        myRealmObject = realm.createObject(MyRealmObject.class); 
        myRealmObject.setFirstName(mEditTextFirstName.getText().toString()); 
        myRealmObject.setLastName(mEditTextLastName.getText().toString()); 
        myRealmObject.setEmail(mEditTextEmail.getText().toString()); 
        myRealmObject.setPassword(mEditTextPassword.getText().toString()); 
        myRealmObject.setConfirmPassword(mEditTextConfirmPassword.getText().toString()); 


        realm.commitTransaction(); 

        showSnackBar("Save Success"); 


       } catch (RealmPrimaryKeyConstraintException e){ 
        e.printStackTrace(); 
        showSnackBar("User found on db."); 
       } 

      } 
     } 
    }); 


} 

private void showSnackBar(String msg) { 
    try { 
     Snackbar.make(findViewById(R.id.relativeregister), msg, Snackbar.LENGTH_SHORT).show(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); 
    } 
} 



} 

Giriş için benim kodudur ..

public class LoginActivity extends AppCompatActivity { 

private static final String TAG = "Home"; 
private EditText mEditTextEmail, mEditTextPassword; 
private TextView txtlogin; 
TextView Create; 
private Realm realm; 
private MyRealmObject myRealmObject; 

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

    try { 
     realm = Realm.getInstance(getApplicationContext()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    mEditTextEmail = (EditText) findViewById(R.id.edtemail); 
    mEditTextPassword = (EditText) findViewById(R.id.edtpswrd); 
    txtlogin = (TextView) findViewById(R.id.txtlogin); 
    Create = (TextView) findViewById(R.id.txtcreate); 


    Create.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent i = new Intent(LoginActivity.this, RegisterActivity.class); 
      startActivity(i); 

     } 
    }); 

    txtlogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mEditTextEmail.length() == 0) { 
       showSnackBar("Enter EMAIL"); 
       mEditTextEmail.requestFocus(); 
      } else if (mEditTextPassword.length() == 0) { 
       showSnackBar("Enter password"); 
       mEditTextPassword.requestFocus(); 
       Intent i = new Intent(LoginActivity.this, MainActivity.class); 
       startActivity(i); 


      } 
     } 

     private boolean checkUser(String email,String password) { 
       RealmResults<MyRealmObject> realmObjects = realm.where(MyRealmObject.class).findAll(); 
       for (MyRealmObject myRealmObject : realmObjects) { 
        if (email.equals(myRealmObject.getEmail()) && password.equals(myRealmObject.getPassword())) { 
         Log.e(TAG, myRealmObject.getEmail()); 
         return true; 
        } 
    } 


       Log.e(TAG, String.valueOf(realm.where(MyRealmObject.class).contains("Email", email))); 
       return false; 
      } 



     private void showSnackBar(String msg) { 
      try { 
       Snackbar.make(findViewById(R.id.relativelogin), msg, Snackbar.LENGTH_SHORT).show(); 
      } catch (NullPointerException e) { 
       e.printStackTrace(); 
       Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); 
      } 
     } 


    }); 
} 

Benim RealmObject Sınıfı:

public class MyRealmObject extends RealmObject { 
private String FirstName, LastName,ConfirmPassword; 
@PrimaryKey 
private String Email; 
private String Password; 

public MyRealmObject() { 
} 

public String getFirstName() { 
    return FirstName; 
} 

public void setFirstName(String FirstName) { 
    this.FirstName = FirstName; 
} 

public String getLastName() { 
    return LastName; 
} 

public void setLastName(String LastName) { 
    this.LastName = LastName; 
} 

public String getEmail() { 
    return Email; 
} 

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

public String getPassword() { 
    return Password; 
} 

public void setPassword(String password) { 
    this.Password = password; 
} 

public String getConfirmPassword() { 
    return getConfirmPassword(); 
} 

public void setConfirmPassword(String confirmPassword) { 
    this.ConfirmPassword = confirmPassword; 
} 

}

Birisi yanlış nerede bana yol. peşin

Teşekkür .. Realm.getInstance(context) kullanılarak kullanım dışı olduğunu

+0

Merhaba Ishita, Neden bölge örneğinizin kodunuza göre boş olacağını açık bir neden göremiyorum. Sorular: 1) burada null olup olmadığını görmek için realm = Realm.getInstance (getApplicationContext()) sonra kodu ayıklama var mı? 2) Hangi Realm sürümünü kullanıyorsunuz? 0.88.2 üzerinde Realm.getInstance kullanımdan kaldırılmıştır, eğer 0.88.2 üzerinde değilseniz, upgdate'i deneyin ve bir RealmConfiguration ile kullanmayı deneyin veya uygulamanızda varsayılan yapılandırmayı ayarlayın. Bkz. Https://realm.io/docs/java/latest/ ve bölüm "Varsayılan RealmConfiguration". Nasıl gideceğini bana bildirin. Ben savedInstanceState = null bölge = null olsun –

+0

merhaba @Nerevar Birazdan alemine sonra kod hata ayıklama = Realm.getInstance (getApplicationContext(), null bir sorun yaşıyorum Şimdi, sorunun oluştuğu satırı biliyorsunuz.Örnek örneğinizi oluşturma şeklinizi değiştirmenizi şiddetle öneririm Yalnızca bunu test edip edemeyeceğinizi test etmek için şunu deneyebilirsiniz: RealmConfiguration realmConfig = new RealmConfiguration.Builder (getActivity()) build(); Realm realm = Realm.getInstance (realmConfig); Bu kodun sadece test için olması gerektiğini unutmayın. Eğer bu işe yararsa, uygulamayı daha iyi ve daha net hale getirebilirsiniz, önceki yorumda gönderdiğim bağlantıya bakın. Kullandığınız sürüme bakarsanız ve sizin için uygun değilse mi? – Ishita

+0

Hey yine Tamam, bilerek; –

cevap

0

Not. Bunun yerine uygulama sınıfında varsayılan RealmConfiguration ayarlamak ve burada açıklandığı şekilde Realm.getDefaultInstance() kullanmalıdır: https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances

kodunuzu olsa durumlar atma edilmemelidir bir bakışta itibaren, ama bir try/catch realm = Realm.getInstance(getApplicationContext()) sarma, tehlikelidir çünkü eğer yöntem atıyor, gördüğünüz NullPointer'ı alacaksınız. Bunu kaldıracağım.

+0

Hello @Christian Melchior .. Şimdi Null nesne referansı ile sorun iyidir. Giriş yaparken veritabanımda kullanıcı adımı ve şifremi kontrol ederken bir sorun yaşıyorum. Bu kodun iyi olup olmadığını kontrol edebilir miyim? if (email.equals (myRealmObject.getEmail()) && password.equals (myRealmObject.getPassword())) – Ishita

+0

Eğer "myRealmObject! = Null" ise evet, iyi olmalı. –

İlgili konular