내 Android 앱 중 하나에 렘 영역을 사용하기로 결정했습니다. 그래서 Realm for R & D 목적으로 간단한 앱을 만들려고합니다. 그러나 그것이 영역을 사용하는 올바른 방법이라면 혼란 스럽습니다. 내 프로젝트가 제대로 작동하고 데이터가 올바르게 표시됩니다. Android에서 Realm을 사용하는 올바른 방법입니까?
package com.github.abdalimran.realmandroid;
import android.app.Application;
import android.content.Context;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmResults;
public class RealmDB extends Application{
private Realm myRealm;
public RealmDB(Context context) {
myRealm = Realm.getInstance(new RealmConfiguration.Builder(context)
.name("myOtherRealm.realm")
.build());
}
public void addData(PersonDetailsModel p) {
myRealm.beginTransaction();
PersonDetailsModel person = myRealm.createObject(PersonDetailsModel.class);
person.setName(p.getName());
person.setAge(p.getAge());
person.setEmail(p.getEmail());
person.setAddress(p.getAddress());
myRealm.commitTransaction();
}
public RealmResults getAllData() {
RealmResults<PersonDetailsModel> query = myRealm.where(PersonDetailsModel.class).findAll();
return query;
}
public void closeRealm() {
myRealm.close();
}
}
이 지금은이 클래스의 인스턴스를 생성하고 방법을 사용하여 작업을 수행하고 : 여기
내가 자바 클래스를
RealmDB.java
을 만들어 내 codes- 있습니다.
다음
package com.github.abdalimran.realmandroid;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ListView lvPersonNameList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvPersonNameList= (ListView) findViewById(R.id.lvPersonNameList);
RealmDB rdb=new RealmDB(this);
Log.i("list",""+rdb.getAllData());
if(rdb.getAllData()==null){
Toast.makeText(MainActivity.this, "No data found. Add person.", Toast.LENGTH_SHORT).show();
}
else {
ArrayAdapter<PersonDetailsModel> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1,
android.R.id.text1,
rdb.getAllData());
lvPersonNameList.setAdapter(adapter);
}
}
public void AddPerson(View view) {
Intent intent=new Intent(this,AddPersonActivity.class);
startActivity(intent);
}
}
내 AddPersonActivity.java
클래스 -
package com.github.abdalimran.realmandroid;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class PersonDetailsModel extends RealmObject
{
@PrimaryKey
private String id;
private String name;
private String email;
private String address;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "ID: "+getId()+"\n"+
"Name: "+getName()+"\n"+
"Age: "+getAge()+"\n"+
"Email: "+getEmail()+"\n"+
"Address: "+getAddress()+"\n";
}
}
이 내가 RealmDB 클래스와 수행하는 작업을 인스턴스화있어 MainActivity.java
입니다 : 여기
PersonDetailsModel.java
입니다
package com.github.abdalimran.realmandroid;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import java.text.SimpleDateFormat;
import java.util.Date;
public class AddPersonActivity extends AppCompatActivity {
private EditText name;
private EditText age;
private EditText email;
private EditText address;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_person);
name= (EditText) findViewById(R.id.name);
age= (EditText) findViewById(R.id.age);
email= (EditText) findViewById(R.id.email);
address= (EditText) findViewById(R.id.address);
}
public void AddPerson(View view) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyMMddhhmmssMs");
String uniqueid = ft.format(dNow);
Log.i("uniqueid",uniqueid);
String sname=name.getText().toString();
String sage=age.getText().toString();
String semail=email.getText().toString();
String saddress=address.getText().toString();
PersonDetailsModel person=new PersonDetailsModel();
person.setId(uniqueid);
person.setName(sname);
person.setAge(Integer.parseInt(sage));
person.setEmail(semail);
person.setAddress(saddress);
RealmDB rdb=new RealmDB(getApplicationContext());
rdb.addData(person);
rdb.closeRealm();
}
}
Realm을 Android 프로젝트에 구현하는 정확한 접근 방법은 무엇입니까?
는 대부분 다음 코드와 혼란 스러워요 : 여기
public void addData(PersonDetailsModel p) {
myRealm.beginTransaction();
PersonDetailsModel person = myRealm.createObject(PersonDetailsModel.class);
person.setName(p.getName());
person.setAge(p.getAge());
person.setEmail(p.getEmail());
person.setAddress(p.getAddress());
myRealm.commitTransaction();
}
내가 매개 변수 PersonDetailsModel p
있습니다. 하지만 myRealm.createObject(PersonDetailsModel.class);
을 사용하여 영역 객체를 만든 다음 p
에서 데이터를 가져와 person
으로 설정합니다. 매개 변수 p
을 직접 createObject()
에 설정하는 방법이 없습니까?
예/아니오를 찾고 있습니까? ? 문제가 무엇입니까? 작동합니까?또는 누군가가 코드를 검토하고 잠재적으로 코드를 리팩터링하기를 원하십니까? –
필자는 개인적으로'rdb.getAllData()'를 변수에 저장해야 데이터베이스에 계속 질의를하지는 않지만 어떤 것도 잘못 본 것 같지는 않다. –
예 ..이 방법이 효과적이다. 하지만 올바른 방법으로 구현하고 있는지 확신 할 수 없습니다. 누군가가 내 접근 방식을 검토하고 뭔가 잘못하고 있다고 제안하길 원합니다. –