-1

多くのテーブルがあり、テーブルに複数の行が含まれるプロジェクトに取り組んでいます。データベースからデータを取得し、を使用して表示するにはどうすればよい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) {

                }
            }
        });
    }
}

私が間違っている場合は、データを取得して SimpleAdapter に表示するのを手伝ってください。

4

2 に答える 2

0

sqlliteまたはmysqlからどこでデータを受け取りたいですか?
そのmysqlの場合、phpを使用してデータを取得し、json形式でエコーします(Googleで検索します)そして、JSONを使用してAndroidアプリ
で値を解析し、リストビューで表示します

于 2014-08-25T18:08:45.833 に答える
0

多くのテーブルを扱っているため、ORM ライブラリを使用することをお勧めします。これにより、クエリなどの仕事が楽になります。

ORM とは何かを知るには、

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

Android用のORMライブラリをダウンロードするには

http://ormlite.com/

ORM ライブラリのチュートリアル、

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

于 2014-08-25T18:30:29.953 に答える