2017-09-27 6 views
0

imageViewから画像パス文字列を取得しようとしています。 imageViewは、SQLiteデータベースに文字列パスストアを使用して請求されます。
画像パス1以外の項目でDbの項目を変更すると、imageViewからパスを読み取ってDBを正しく更新できません。したがって、フィールド画像のパスは、何らかの更新後にnullになります。私はすでに、すべての関連記事を読んImageViewから画像パスを取得する

private void saveProduct() { 
    // Read from input field 
    //Use trim to eliminate leading or trailing white space 
    String nameString = mNameEditText.getText().toString().trim(); 
    String qtyString = mQtyEditText.getText().toString().trim(); 
    String priceString = mPriceEditText.getText().toString().trim(); 
    String mailString = mEmailEditText.getText().toString().trim(); 
    String phoneString = mPhoneEditText.getText().toString().trim(); 

    // Check if this is a new product or an existing one 
    if (mcurrentProdUri == null && 
      TextUtils.isEmpty(nameString) && TextUtils.isEmpty(qtyString) 
      && TextUtils.isEmpty(priceString)&& TextUtils.isEmpty(mailString) 
      && TextUtils.isEmpty(phoneString)) { 
     return; 
    } 

    //Create a ContentValues object to populate the database 
    ContentValues values = new ContentValues(); 
    values.put(InventoryContract.ProductEntry.COLUMN_PRODUCT_NAME, nameString); 
    values.put(InventoryContract.ProductEntry.COLUMN_PRODUCT_QTY, qtyString); 
    values.put(InventoryContract.ProductEntry.COLUMN_PRODUCT_PRICE, priceString); 
    values.put(InventoryContract.ProductEntry.COLUMN_EMAIL, mailString); 
    values.put(InventoryContract.ProductEntry.COLUMN_PHONE, phoneString); 
    values.put(InventoryContract.ProductEntry.COLUMN_PRODUCT_PIC, picPath); 

    //Determine if this is a new product or not by checking if mCurrentProdUri is null or not 
    if (mcurrentProdUri == null) { 

     Uri newUri = getContentResolver().insert(InventoryContract.ProductEntry.CONTENT_URI, values); 

     // check if newUri is null or not 
     if (newUri == null){ 
      //Show an error toast message 
      Toast.makeText(this, "There has been an error inserting a new product", Toast.LENGTH_SHORT).show(); 
     } else { 
      //Otherwise show a successful addition message 
      Toast.makeText(this, "A new product has been added!", Toast.LENGTH_SHORT).show(); 

     } 
    } else { 
     //Otherwise if this is an existing product proceed updating it with new data 

     int rowsAffected = getContentResolver().update(mcurrentProdUri, values, null, null); 

     if (rowsAffected == 0) { 
      // If no rows were affected show error toast message 
      Toast.makeText(this, "There has been an error in updating the product", Toast.LENGTH_SHORT).show(); 
     } else { 
      // Otherwise the update was successful and we can show the related Toast message 
      Toast.makeText(this, "The product has been updated!", Toast.LENGTH_SHORT).show(); 
     } 

    } 

} 

が、私は本当に私が方法を読み込むことができますかわからない:私はsaveProduct()メソッドを呼び出して保存ボタンをクリックし、コードで

、関連画像パス(またはURI)を出すためにImageViewのサポート

+1

「ImageView」は、画像がどこから来たのかわかりません。この情報は、アクティビティやフラグメントの別のフィールドなど、別の方法で覚えておく必要があります。 – CommonsWare

+0

@CommonsWareは素早く答えてくれてありがとう。 initLoader(EXISTING_PROD_LOADER、null、this);ここにパスデータを格納する必要があると思いますか?getLoaderManager()を使用してUIにデータをロードします。 – akstavrh

+0

@CommonsWare!私は、この記事のhttps://stackoverflow.com/questions/14424624/using-cursorloader-with-loadermanager-to-retrieve-images-from-android-appsで提案されているように、OnLoadFinished()でいくつかのロジックを追加して解決しました。正しい軌道に乗ってくれてありがとう! – akstavrh

答えて

0

ため

多くのおかげであなたはそれがの責任ではないとして、あなたはImageViewのをロードする前に、アクティビティ/フラグメント・レベルでURIを追跡する必要がありますレギュラーImageViewメンバーのソースです。

それはあなたの場合に役立ちます場合は、しかし、そのために責任がある拡張ImageViewのを構築することができます。

class MyImageView extends ImageView { 

    private Uri mImageUri; 

    public MyImageView(Context context) { 
     super(context); 
    } 

    @Override 
    public void setImageURI(@Nullable Uri uri) { 
     super.setImageURI(uri); 
     mImageUri = uri; 
    } 

    public Uri getImageUri(){ 
     return mImageUri; 
    } 
} 

あなたはそのルートを移動した場合は、あなたが設定の変更時に考慮に保存ビューステートを取らなければなりませんあなたはそのウリを失うかもしれません。

関連する問題