繁体   English   中英

如何在领域数据库中查看listview中的查询数据?

[英]How to view the queried data in listview in realm database?

我是realm数据库的新手,我在realm数据库中遇到了从数据库查询数据的问题。 来自数据库的查询数据看起来如下图所示 在此输入图像描述

我需要在listview中逐个查看查询数据。

用于将数据添加到领域数据库的代码。

  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);
    }

公共类MyNames扩展了RealmObject {

        String name;
        public String getName() {
            return name;
        }

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

请帮助如何逐一查看listview中数据库中查询的数据。

使用RealmBaseAdapter

从数据库中查询数据的代码。

 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 MyNamesAdapter extends RealmBaseAdapter<MyNames> {
    private static class ViewHolder {
        TextView text;
    }

    public MyListAdapter(OrderedRealmCollection<Counter> realmResults) {
        super(realmResults);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext())
                    .inflate(android.R.layout.simple_list_item_1, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.text = (TextView) convertView.findViewById(android.R.id.text1);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        if (adapterData != null) {
            MyNames item = adapterData.get(position);
            viewHolder.text.setText(item.getName());
        }
        return convertView;
    }
}

所以你应该使用RealmResults<T>RealmBaseAdapter来自https://github.com/realm/realm-android-adapters

newDataList<RealmResults<MyNames>> 列表视图显示List<> ,它们是RealmResult<MyNames> ,它是自己的“集合”,导致列表仅显示包含所有对象的1个项目。

但是,您希望在列表视图中显示单个MyNames项,而不是RealmResults。

您可能正在寻找类似的东西(简化了一下)

public List<MyNames> listdata()
{
    mRealm = Realm.getDefaultInstance();
    return mRealm.where(MyNames.class).findAll();
}

public void listAdapter()
{
    List<MyNames> names = listdata();
    ArrayAdapter adapter = new ArrayAdapter(this,R.layout.list_simple,R.id.textname,newData);
    listview.setAdapter(adapter);
}

另外,不要忘记在Activity#onDestroy()关闭领域

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM