2016-03-31 73 views
0

我无法从列表视图中重新获取所选项目的ID。 我在做什么的逻辑是:我有一个产品显示在列表视图。当我点击编辑本产品时,它会将我发送到产品的详细信息页面。这里的产品名称,价格等都是可以接受的,除了ID以外。 谁能告诉我我做错了什么?下面是代码: 类数据库处理器无法获取所选项目_id

//addItemToDB 
public void addItem(ItemModel item) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(Constants.PRODUCT_ID, item.getItemId()); 
    values.put(Constants.PRODUCT_NAME, item.getItemName()); 
    values.put(Constants.PRODUCT_PRICE, item.getItemPrice()); 
    db.insert(Constants.TABLE_NAME, null, values); 
} 

> //get all items 
public ArrayList<ItemModel> getAllItems() { 

    SQLiteDatabase db = getReadableDatabase(); 

    Cursor cursor = db.query(Constants.TABLE_NAME, new String[]{Constants.PRODUCT_ID, Constants.PRODUCT_NAME, Constants.PRODUCT_PRICE}, 
      null, null, null, null, Constants.PRODUCT_DATE + " DESC"); 

    if (cursor.moveToFirst()) { 
     do { 

      ItemModel model = new ItemModel(); 

      //format date 
      java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance(); 
      String data = dateFormat.format(new Date(cursor.getLong(cursor.getColumnIndex(Constants.PRODUCT_DATE)))); 

      model.setItemId(cursor.getInt(cursor.getColumnIndex(Constants.PRODUCT_ID))); 
      model.setItemName(cursor.getString(cursor.getColumnIndex(Constants.PRODUCT_NAME))); 
      model.setItemPrice(cursor.getDouble(cursor.getColumnIndexOrThrow(Constants.PRODUCT_PRICE))); 

      modelArrayList.add(model); 

     } while (cursor.moveToNext()); 
    } 
    return modelArrayList; 

在listViewAdapter我有getView方法:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    final ViewHolder holder; 

    if (row == null || (row.getTag()) == null){ 

     LayoutInflater inflater = LayoutInflater.from(activity); 
     row = inflater.inflate(layoutResource,null); 

     holder = new ViewHolder(); 

     holder.hItemName = (TextView) row.findViewById(R.id.custom_row_productName); 
     holder.hItemPrice = (TextView) row.findViewById(R.id.custom_row_productPrice); 

     holder.hItemEdit = (ImageView) row.findViewById(R.id.custom_row_edit); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    holder.hModel = getItem(position); 

    holder.hItemName.setText(holder.hModel.getItemName()); 
    holder.hItemPrice.setText(String.valueOf(holder.hModel.getItemPrice())); 

    holder.hItemEdit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int itemID = holder.hModel.getItemId(); 
      String itemName = holder.hModel.getItemName(); 
      String itemPrice = String.valueOf(holder.hModel.getItemPrice()); 

      Intent intent = new Intent(activity, ItemDetail.class); 

      intent.putExtra("id", itemID); 
      intent.putExtra("product", itemName); 
      intent.putExtra("price", itemPrice); 
      intent.putExtra("type", itemType); 

      startActivity(activity, intent,null); 
     } 
    }); 

并在该产品的详细信息页面onCreate我有:

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
      itemProductName.setText(extras.getString("product")); 
      itemPrice.setText(extras.getString("price")); 
      final int itemID = extras.getInt("id"); 

      saveButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
         dbHandler.updateItem(itemID); 
         Toast.makeText(ItemDetail.this, itemProductName.getText().toString() + " was modified", Toast.LENGTH_SHORT).show(); 

         startActivity(new Intent(ItemDetail.this, MainActivity.class)); 
        } 
       } 
      }); 
    } 

回答

0

我发现这个问题,就在您的适配器仅更换一个行:

intent.putExtra("id", itemID); 

intent.putExtra("id", ""+itemID); 

还有一个编辑,你哈瓦做:

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
      itemProductName.setText(extras.getString("product")); 
      itemPrice.setText(extras.getString("price")); 

//Here is the one change 

      final String itemID = extras.getString("id"); 

      saveButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
         dbHandler.updateItem(itemID); 
         Toast.makeText(ItemDetail.this, itemProductName.getText().toString() + " was modified", Toast.LENGTH_SHORT).show(); 

         startActivity(new Intent(ItemDetail.this, MainActivity.class)); 
        } 
       } 
      }); 
    } 
+0

坦克DäñishShärmà它可以像你说的那样..它可以与我的代码也只是知道调试器知道问题是我所有插入到数据库的项目插入的ID为0。不知道为什么,因为我已经把列_id INTEGER PRIMARY KEY AUTOINCREMENT, – Adrian

+0

你的意思是说你的AUTOINCREMENT功能不工作,它总是为每个记录插入零? –