2012-06-04 4 views
0

Я создал приложение для сканирования штрих-кодов и QR-кода с использованием библиотеки ZXing. Я также внедрил database, который хранит отсканированные продукты. Мне нужно реализовать listview для отображения сохраненных продуктов. есть идеи?Создание и отображение ListView базы данных ZXing

здесь классы:

BarCodeActivity

@Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.spot_pay); 
     Button addButton = (Button) findViewById (R.id.addMenuButton); 
     addButton.setOnClickListener (new OnClickListener(){ 
      public void onClick (View v){ 
       startActivity(new Intent(CodiceBarreActivity.this, AggiungiCodiceActivity.class)); 
      } 
      }); 
    } 
static final class ProductData { 
    String barcode; 
    String format; 
    String title; 
    BigDecimal price; 
    } 
} 

ProductDatabase:

private SQLiteDatabase db; 

    private static class ProductDatabaseHelper extends SQLiteOpenHelper { 

     public ProductDatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      StringBuilder sql = new StringBuilder(); 

      sql.append("create table ").append(PRODUCT_TABLE) 
       .append("( ") 
       .append(" _id integer primary key,") 
       .append(" barcode text,") 
       .append(" format text,") 
       .append(" title text,") 
       .append(" price currency") 
       .append(") "); 

      db.execSQL(sql.toString());  

      Log.d(TAG, PRODUCT_TABLE + "table created"); 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
       db.execSQL("drop table if exists " + PRODUCT_TABLE);  
       Log.d(TAG, PRODUCT_TABLE + "table dropped"); 
       onCreate(db); 
     } 
    } 

    public CodiciDatabase(Context context) { 
     ProductDatabaseHelper helper = new ProductDatabaseHelper(context); 
     db = helper.getWritableDatabase(); 
    } 

    public boolean insert(ProductData product) { 
     ContentValues vals = new ContentValues(); 
     vals.put("barcode", product.barcode); 
     vals.put("format", product.format); 
     vals.put("title", product.title); 
     vals.put("price", product.price.multiply(ONE_HUNDRED).longValue()); 

     return db.insert(PRODUCT_TABLE, null, vals) != -1; 
    } 
     } 

AddProduct

private static final int REQUEST_BARCODE = 0; 
    private static final ProductData mProductData = new ProductData(); 





    private EditText mBarcodeEdit; 
    private EditText mFormatEdit; 
    private EditText mTitleEdit; 
    private EditText mPriceEdit; 
    private Button mScanButton; 
    private Button mAddButton; 
    private CodiciDatabase mProductDb; 

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

     mBarcodeEdit = (EditText) findViewById(R.id.barcodeEdit); 
     mFormatEdit = (EditText) findViewById(R.id.codeFormatEdit); 
     mTitleEdit = (EditText) findViewById(R.id.titleEdit); 
     mPriceEdit = (EditText) findViewById(R.id.priceEdit); 
     mScanButton = (Button) findViewById(R.id.scanButton); 
     mScanButton.setOnClickListener(this); 
     mAddButton = (Button) findViewById(R.id.addButton); 
     mAddButton.setOnClickListener(this); 
     mProductDb = new CodiciDatabase(this); // not yet shown 
    } 




    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.scanButton: 
      Intent intent = new Intent ("com.google.zxing.client.android.SCAN"); 
      intent.putExtra("SCAN_MODE", "PRODUCT_MODE"); 
      startActivityForResult(intent, REQUEST_BARCODE); 
      break; 

     case R.id.addButton: 
      String barcode = mBarcodeEdit.getText().toString(); 
      String format = mFormatEdit.getText().toString(); 
      String title = mTitleEdit.getText().toString(); 
      String price = mPriceEdit.getText().toString(); 

      String errors = validateFields(barcode, format, title, price); 
      if (errors.length() > 0) { 
       showInfoDialog(this, "Please fix errors", errors); 
      } else { 
       mProductData.barcode = barcode; 
       mProductData.format = format; 
       mProductData.title = title; 
       mProductData.price = new BigDecimal(price); 

       mProductDb.insert(mProductData); 
       showInfoDialog(this, "Success", "Product saved successfully"); 
       resetForm(); 
      } 
      break; 
     } 
    } 

     } 


    private void resetForm() { 
     mBarcodeEdit.getText().clear(); 
     mFormatEdit.getText().clear(); 
     mTitleEdit.getText().clear(); 
     mPriceEdit.getText().clear(); 

    } 


    private void showInfoDialog(Context context, String title, String information) { 
     new AlertDialog.Builder (context) 
     .setMessage(information) 
     .setTitle(title) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 


      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 

      } 
     }).show(); 
    } 


    public void onActivityResult(int requestCode, int resultCode, Intent intent){ 
     if (requestCode == REQUEST_BARCODE){ 
      if (resultCode == RESULT_OK) { 
       String barcode = intent.getStringExtra("SCAN_RESULT"); 
       mBarcodeEdit.setText(barcode); 

       String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       mFormatEdit.setText(format); 
      } else if (resultCode == RESULT_CANCELED){ 
       finish(); 
      } 

     } 
    } 
} 

    private static String validateFields(String barcode, String format, 
      String title, String price) { 
      StringBuilder errors = new StringBuilder(); 

      if (barcode.matches("^\\s*$")) { 
       errors.append("Barcode required\n"); 
      } 

      if (format.matches("^\\s*$")) { 
       errors.append("Format required\n"); 
      } 

      if (title.matches("^\\s*$")) { 
       errors.append("Title required\n"); 
      } 

      if (!price.matches("^-?\\d+(.\\d+)?$")) { 
       errors.append("Need numeric price\n"); 
      } 

      return errors.toString(); 
     } 
} 

ответ

0

Обзор того, что вам нужно сделать:

Запустите запрос в своей базе данных, который вернет вам Cursor. Как только вы получите это, вам нужно сделать make CursorAdapter и переопределить его метод getView(), чтобы раздуть и заполнить строку Views. После этого вы можете использовать метод ListView.setAdapter(), проходящий в экземпляре вашего адаптера. Он будет обрабатывать обновление списка на экране для вас всякий раз, когда появляются новые данные.

Я предлагаю вместо того, чтобы пытаться справиться с этим в своем собственном проекте, вы делаете перерыв от этого и делаете это Notepad tutorial from the developer docs. Это очень мало и просто, но как только вы закончите, у вас будет образец кода, который будет использоваться, когда вы работаете сделав это для вашего приложения штрих-кода.

Смежные вопросы