在android中读取数据sqlite失败

时间:2015-03-14 02:26:15

标签: java android sqlite crud

我的申请中有问题,
目的是读取存储在数据库中的数据,
但它最终显示出意想不到的价值。

这是我的ViewData.class

public class ViewData extends ListActivity {

    //inisialisasi kontroller
    private DBDataSource dataSource;

    //inisialisasi arraylist
    private ArrayList<Wiridan> values;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewdata);

        dataSource = new DBDataSource(this);
        // buka kontroller
        dataSource.open();

        // ambil semua data barang
        values = dataSource.getAllWiridan();

        // masukkan data barang ke array adapter
        ArrayAdapter<Wiridan> adapter = new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, values);

        // set adapter pada list
        setListAdapter(adapter);
    }
}

DBDataSource.java中的代码用于读取数据

private Wiridan cursorToWiridan(Cursor cursor)
    {
        // buat objek barang baru
        Wiridan wiridan = new Wiridan();
        // debug LOGCAT
        Log.v("info", "The getLONG "+cursor.getLong(0));
        Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getInt(2));

        /* Set atribut pada objek barang dengan
         * data kursor yang diambil dari database*/
       wiridan.setId(cursor.getLong(0));
        wiridan.setJudul_wiridan(cursor.getString(1));
        wiridan.setJumlah_wiridan(cursor.getInt(2));

        //kembalikan sebagai objek barang
        return wiridan;
    }


    //mengambil semua data barang

        public ArrayList<Wiridan> getAllWiridan() {
            ArrayList<Wiridan> daftarWiridan = new ArrayList<>();

            // select all SQL query
            Cursor cursor = database.query(DBHelper.TABLE_NAME,
                    allColumns, null, null, null, null, null);

            // pindah ke data paling pertama
            cursor.moveToFirst();
            // jika masih ada data, masukkan data barang ke
            // daftar barang
            while (!cursor.isAfterLast()) {
                Wiridan wiridan = cursorToWiridan(cursor);
                daftarWiridan.add(wiridan);
                cursor.moveToNext();
            }
            // Make sure to close the cursor
            cursor.close();
            return daftarWiridan;
        }

最后一个是我的实体类Wiridan.java

public class Wiridan {
    private long id;
    private String judul_wiridan;
    private int jumlah_wiridan;

    public Wiridan()
    {

    }
    public long getId() {
        return id;
    }


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

    public String getJudul_wiridan() {
        return judul_wiridan;
    }


    public void setJudul_wiridan(String judul_wiridan) {
        this.judul_wiridan = judul_wiridan;
    }

    public int getJumlah_wiridan() {
        return jumlah_wiridan;
    }


    public void setJumlah_wiridan(int jumlah_wiridan) {
        this.jumlah_wiridan = jumlah_wiridan;
    }

}

并且结果出乎意料,它只显示了包的值,而不是我从ResultActivity.java输入的值
Unexpected Value


我非常感谢你的帮助,对不起我的英语不好。

2 个答案:

答案 0 :(得分:1)

当前ArrayAdapter适配器正在调用toString类的默认Wiridan方法并显示对象字符串表示。

要在judul_wiridan类中的ListView覆盖toString方法中显示Wiridan

 @Override
public String toString() {
    return getJumlah_wiridan();
}

或者通过扩展ArrayAdapter来覆盖getView方法来创建自定义适配器:

Customizing Android ListView Items with Custom ArrayAdapter

答案 1 :(得分:0)

您在arrayadapter中传递用户定义数据类型(Object)的Arraylist,而不是String或CharSequence的Arraylist。

使用

ArrayAdapter<String> 

并且通过字符串的arraylist或者你可以 如果要显示2个以上的textView,请创建自定义适配器。