从数据库获取行数据并在Android中检索它

时间:2014-08-25 17:37:06

标签: android sqlite nullpointerexception simpleadapter null-pointer

我正在开发一个包含多个表的项目,一个表包含多行。如何从数据库中获取数据并使用SimpleAdapter

显示数据

我尝试过使用游标,但我只获取存储在数据库中的最后一行值。

尝试使用ArrayList<Hashmap<String, String>>时,我得到NullPointerException,即使使用try catch块也无法解决。

以下是获取它的代码

public class ProducTransection extends Activity {

    AutoCompleteTextView actv;
    TextView datefrom, dateto;
    Button getbtn;
    ArrayAdapter<String> adapname;
    Cursor cl;
    HashMap<String, String> detail = new HashMap<String, String>();
    ArrayList<HashMap<String, String>> detailList;
    ListView lv1;
    DatabaseHandler db = new DatabaseHandler(ProducTransection.this);

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

        actv = (AutoCompleteTextView)findViewById(R.id.ptname);
        datefrom = (TextView)findViewById(R.id.ptfromdate);
        dateto = (TextView)findViewById(R.id.pttodate);
        getbtn = (Button)findViewById(R.id.ptgetbtn);
        lv1 = (ListView)findViewById(R.id.ptlist);

        Calendar dat = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        String formdate = sdf.format(dat.getTime());

        datefrom.setText(formdate);
        dateto.setText(formdate);

        String[] name = db.getName();
        adapname = new ArrayAdapter<String>(ProducTransection.this, android.R.layout.simple_list_item_1, name);
        actv.setAdapter(adapname);

        getbtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    detailList = new ArrayList<HashMap<String, String>>();
                    cl = db.getproducttransection(actv.getText().toString(), datefrom.getText().toString(), dateto.getText().toString());

                    cl.moveToFirst();
                    // do
                    for(int i = 0; i <= cl.getColumnCount(); i++) {
                        String date = cl.getString(cl.getColumnIndex("date"));
                        String product = cl.getString(cl.getColumnIndex("product_name"));
                        String price = cl.getString(cl.getColumnIndex("price"));
                        String Qty = cl.getString(cl.getColumnIndex("qty"));

                        detail.put("dat", date);
                        detail.put("pro", product);
                        detail.put("pri", price);
                        detail.put("qty", Qty);
                        detailList.add(detail);

                        SimpleAdapter simadap = new SimpleAdapter(ProducTransection.this, detailList, R.layout.producttransectionui, 
                            new String[] { "dat", "pro", "pri", "qty"}, 
                                new int[]{ R.id.ptuidate, R.id.ptuiproduct, R.id.ptuiprice, R.id.ptuiqty });

                        lv1.setAdapter(simadap);
                    }
                    // while(cl.moveToNext());
                } catch (IndexOutOfBoundsException e) {

                }
            }
        });
    }
}

现在如果我错了,请帮我getdata并在SimpleAdapter中显示它。

2 个答案:

答案 0 :(得分:0)

你想从sqllite或mysql收到你的数据 如果它的mysql然后使用PHP来检索数据并以json格式回显(google搜索) 然后使用 JSON 来解析Android应用中的值
然后只用listview显示

答案 1 :(得分:0)

我建议您使用ORM库,因为您正在处理许多表。这将简化您的查询和工作。

要了解ORM是什么,请转到

http://en.wikipedia.org/wiki/Object-relational_mapping

并下载ORM库for android

http://ormlite.com/

ORM库教程,

http://ormlite.com/android/examples/