-1

次のコードは、sqlite データベースからの情報をリストビューに表示します。まず、日付が表示され、リストビューでクリックできます。日付をクリックすると、リストビューでその日付に行われた情報が表示されます。私の問題は、この日付12.01.2013でデータを保存し、後で同じ日付を繰り返すと、同じ日付が2回表示され、1つの日付だけを表示し、それをクリックしてデータを表示することです。午前中に保存したデータと、同じ日に保存したデータは、2 つの類似した日付ではありません。

ここにコードがあります

public class Pro extends Activity implements OnItemClickListener {

    private ListView uNamesListView;

        private ListAdapter customerListAdapter;
        private ArrayList<PojoClass> pojoArrayList;

    final Context context = this;
    private Button button;
    private TextView result;
    DBAdapter db = new DBAdapter(this);

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

        uNamesListView = (ListView) findViewById(R.id.listView1);
        uNamesListView.setOnItemClickListener(this);

        pojoArrayList = new ArrayList<PojoClass>();
        customerListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
        uNamesListView.setAdapter(customerListAdapter);                 


    }

           public List<String> populateList() {


                List<String> uGraduateNamesList = new ArrayList<String>();
                DatabaseHelper openHelperClass = new DatabaseHelper(this);
                SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();
                Cursor cursor = sqliteDatabase.query(DBAdapter.SCAN_TABLE, null, null, null, null, null, null);
                startManagingCursor(cursor);
                while (cursor.moveToNext()) {

                    String cDate = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_Date ));
                    String cMeterNumber = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_MeterNumber ));
                    String cVname = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_Vname ));
                    String cPname = cursor.getString(cursor.getColumnIndex(DBAdapter.COLUMN_PName ));

                    PojoClass ss = new PojoClass();
                    ss.SetName(cDate);
                    ss.SetSurname(cMeterNumber);
                    ss.SetID(cVname);
                    ss.SetHaddress(cPname);
                pojoArrayList.add(ss);

                    uGraduateNamesList.add(cDate);
                }
                sqliteDatabase.close();

                return uGraduateNamesList;

    }

    @Override
    public void onItemClick(AdapterView<?> aa, View view, int ss, long bb) {
        // TODO Auto-generated method stub
        Intent updateCustomerIntent = new Intent(Pro.this, ViewByVendor.class);

        updateCustomerIntent.putExtra("product", product);
        startActivity(updateCustomerIntent);

        Toast.makeText(getApplicationContext(), "Clicked on :" + ss, Toast.LENGTH_SHORT).show();
        PojoClass clickedObject =  pojoArrayList.get(ss);

        Bundle dataBundle = new Bundle();

        dataBundle.putString("clickedDate", clickedObject.getDates());
        dataBundle.putString("clickedMeterNumber", clickedObject.getMeterNumber());
        dataBundle.putString("clickedVname", clickedObject.getVname());
        dataBundle.putString("clickedPname", clickedObject.getPname());
        updateCustomerIntent.putExtras(dataBundle);
        startActivity(updateCustomerIntent);


    }


}

私はあなたの助けに感謝します。

4

1 に答える 1

0

リスト ビューの日付を読み取るときは、一意の日付のみが必要です。DISTINCTSQL では、これは または のいずれかで実行できますGROUP BY

SELECT DISTINCT Date FROM ScanTable
SELECT Date FROM ScanTable GROUP BY Date

Android コードは次のようになります。

cursor = db.query(true,                       // <-- distinct
                  DBAdapter.SCAN_TABLE,
                  new String[] { DBAdapter.COLUMN_Date },
                  null, null, null, null, null, null);
cursor = db.query(DBAdapter.SCAN_TABLE,
                  new String[] { DBAdapter.COLUMN_Date },
                  null, null,
                  DBAdapter.COLUMN_Date,      // <-- groupBy
                  null, null);

日付のデータを表示するには、日付のみをそのアクティビティに渡し、その日付に一致するすべてのレコードを読み取ります。

SELECT * FROM ScanTable WHERE Date = ?
String selectedDate = ...;
cursor = db.query(DBAdapter.SCAN_TABLE, null,
                  DBAdapter.COLUMN_Date + " = ?", selectedDate,
                  null, null, null);
于 2013-01-12T07:47:18.097 に答える