Android 如何在realm数据库的listview中查看查询的数据?
我不熟悉领域数据库,我面临的问题是领域数据库从数据库中查询数据。从数据库中查询的数据如下图所示 我需要在listview中逐个查看查询的数据 用于将数据添加到领域数据库的代码Android 如何在realm数据库的listview中查看查询的数据?,android,listview,realm,Android,Listview,Realm,我不熟悉领域数据库,我面临的问题是领域数据库从数据库中查询数据。从数据库中查询的数据如下图所示 我需要在listview中逐个查看查询的数据 用于将数据添加到领域数据库的代码 public class MainActivity extends AppCompatActivity { private Realm mRealm; EditText editText; Button btn,btnNext; @Override protected voi
public class MainActivity extends AppCompatActivity {
private Realm mRealm;
EditText editText;
Button btn,btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
btn = (Button)findViewById(R.id.button);
btnNext = (Button)findViewById(R.id.button2);
Realm.init(getApplicationContext());
mRealm = Realm.getDefaultInstance();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newNames = editText.getText().toString();
mRealm.beginTransaction();
MyNames names = mRealm.createObject(MyNames.class);
names.setName(newNames);
mRealm.commitTransaction();
editText.setText("");
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
}
}
public class Main2Activity extends AppCompatActivity {
ListView listview;
private Realm mRealm;
Button next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
listview = (ListView)findViewById(R.id.list);
next = (Button)findViewById(R.id.button2);
listdata();
listAdapter();
}
public List<RealmResults<MyNames>> listdata()
{
List<RealmResults<MyNames>> names = new ArrayList<>();
mRealm = Realm.getDefaultInstance();
RealmQuery<MyNames> data = mRealm.where(MyNames.class);
RealmResults<MyNames> newData = data.findAll();
names.add(newData);
return names;
}
public void listAdapter()
{
List<RealmResults<MyNames>> newData = this.listdata();
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.list_simple,R.id.textname,newData);
listview.setAdapter(adapter);
}
public class Main2Activity extends AppCompatActivity {
@BindView(R.id.list)
ListView listview;
Realm realm;
@OnClick(R.id.button2)
public void clickButton2() {
// do next
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
realm = Realm.getDefaultInstance();
RealmResults<MyNames> results = realm.where(MyNames.class).findAllAsync();
MyNamesAdapter myNamesAdapter = new MyNamesAdapter(results);
listView.setAdapter(myNamesAdapter);
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close();
}
}
用于从数据库查询数据的代码
public class MainActivity extends AppCompatActivity {
private Realm mRealm;
EditText editText;
Button btn,btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
btn = (Button)findViewById(R.id.button);
btnNext = (Button)findViewById(R.id.button2);
Realm.init(getApplicationContext());
mRealm = Realm.getDefaultInstance();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newNames = editText.getText().toString();
mRealm.beginTransaction();
MyNames names = mRealm.createObject(MyNames.class);
names.setName(newNames);
mRealm.commitTransaction();
editText.setText("");
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
}
}
public class Main2Activity extends AppCompatActivity {
ListView listview;
private Realm mRealm;
Button next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
listview = (ListView)findViewById(R.id.list);
next = (Button)findViewById(R.id.button2);
listdata();
listAdapter();
}
public List<RealmResults<MyNames>> listdata()
{
List<RealmResults<MyNames>> names = new ArrayList<>();
mRealm = Realm.getDefaultInstance();
RealmQuery<MyNames> data = mRealm.where(MyNames.class);
RealmResults<MyNames> newData = data.findAll();
names.add(newData);
return names;
}
public void listAdapter()
{
List<RealmResults<MyNames>> newData = this.listdata();
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.list_simple,R.id.textname,newData);
listview.setAdapter(adapter);
}
public class Main2Activity extends AppCompatActivity {
@BindView(R.id.list)
ListView listview;
Realm realm;
@OnClick(R.id.button2)
public void clickButton2() {
// do next
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
realm = Realm.getDefaultInstance();
RealmResults<MyNames> results = realm.where(MyNames.class).findAllAsync();
MyNamesAdapter myNamesAdapter = new MyNamesAdapter(results);
listView.setAdapter(myNamesAdapter);
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close();
}
}
请帮助如何在listview中逐个查看数据库中查询的数据。
newData
是一个列表。listview显示列表
中的项目,这些项目是RealmResult
,它是自己的“集合”,导致列表仅显示一个包含所有对象的项目
但是,您希望在listview中显示单个MyNames项目,而不是RealmResults
您可能正在寻找类似的内容(简化了一点)
public List listdata()
{
mRealm=Realm.getDefaultInstance();
返回mRealm.where(MyNames.class).findAll();
}
public-void-listAdapter()
{
列表名称=listdata();
ArrayAdapter=新的ArrayAdapter(这个,R.layout.list_simple,R.id.textname,newData);
setAdapter(适配器);
}
另外,不要忘记在活动#onDestroy()中关闭领域
使用RealmBaseAdapter
用于从数据库查询数据的代码
public class MainActivity extends AppCompatActivity {
private Realm mRealm;
EditText editText;
Button btn,btnNext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
btn = (Button)findViewById(R.id.button);
btnNext = (Button)findViewById(R.id.button2);
Realm.init(getApplicationContext());
mRealm = Realm.getDefaultInstance();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newNames = editText.getText().toString();
mRealm.beginTransaction();
MyNames names = mRealm.createObject(MyNames.class);
names.setName(newNames);
mRealm.commitTransaction();
editText.setText("");
}
});
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
}
}
public class Main2Activity extends AppCompatActivity {
ListView listview;
private Realm mRealm;
Button next;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
listview = (ListView)findViewById(R.id.list);
next = (Button)findViewById(R.id.button2);
listdata();
listAdapter();
}
public List<RealmResults<MyNames>> listdata()
{
List<RealmResults<MyNames>> names = new ArrayList<>();
mRealm = Realm.getDefaultInstance();
RealmQuery<MyNames> data = mRealm.where(MyNames.class);
RealmResults<MyNames> newData = data.findAll();
names.add(newData);
return names;
}
public void listAdapter()
{
List<RealmResults<MyNames>> newData = this.listdata();
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.list_simple,R.id.textname,newData);
listview.setAdapter(adapter);
}
public class Main2Activity extends AppCompatActivity {
@BindView(R.id.list)
ListView listview;
Realm realm;
@OnClick(R.id.button2)
public void clickButton2() {
// do next
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
realm = Realm.getDefaultInstance();
RealmResults<MyNames> results = realm.where(MyNames.class).findAllAsync();
MyNamesAdapter myNamesAdapter = new MyNamesAdapter(results);
listView.setAdapter(myNamesAdapter);
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close();
}
}
公共类Main2活动扩展了AppCompative活动{
@BindView(R.id.list)
列表视图列表视图;
境界;
@OnClick(R.id.button2)
公共作废点击按钮2(){
//下一步做
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
把(这个)绑起来;
realm=realm.getDefaultInstance();
RealmResults results=realm.where(MyNames.class).findalsync();
MyNameAdapter MyNameAdapter=新的MyNameAdapter(结果);
setAdapter(myNamesAdapter);
}
@凌驾
公共空间{
super.ondestory();
realm.close();
}
}
及
公共类MyNameAdapter扩展了RealmBaseAdapter{
私有静态类视图持有者{
文本查看文本;
}
公共MyListAdapter(OrderedRealmCollection realmResults){
超级(realmResults);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持票人持票人;
if(convertView==null){
convertView=LayoutInflater.from(parent.getContext())
.充气(android.R.layout.simple_list_item_1,父项,false);
viewHolder=新的viewHolder();
viewHolder.text=(TextView)convertView.findViewById(android.R.id.text1);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
如果(adapterData!=null){
MyNames项=adapterData.get(位置);
viewHolder.text.setText(item.getName());
}
返回视图;
}
}
因此,您应该将RealmResults
与RealmBaseAdapter
fromList names=new ArrayList()代码>但为什么?我有一个疑问,只有在使用添加到调用Adapter.notifyDataSetChanged()的RealmChangeListener
中的RealmResults
时,我才能使用自定义适配器而不是使用RealmBaseAdapter
@PrabhaKaran下次也请参考说明如何将Realm与ListView一起使用的文档示例。现在,在ListView中逐个查看数据,但数据类似于MyNames=[{names:hi}],MyNames=[{names:Kumar}]……在这里,我如何删除括号并仅查看您需要执行的值viewHolder.text.xt(item.getName());
而不是item.toString()
,您不应该使用ArrayAdapter,它使用toString()
现在在listview中逐个查看数据,但数据类似于MyNames=[{names:hi}],MyNames=[{names:Kumar}]…在本例中,如何删除括号并仅查看值如果要使用ArrayAdapter,则必须从每个MyName对象收集字符串并将该收集传递到适配器构造函数。否则,最好使用其他解决方案。它更适合于为您的答案@Tim Castelijnsure自定义数据显示TKH。虽然它没有解释当前代码不起作用的原因,但其他答案中的解决方案更好。您可能希望接受该答案