开发者

How can I set image view which stored in file system according to path in database?

I have three questions:

  1. If I choose to store image.png in file system where should I store it res/drawable/image_1.png or res/drawable/images/image_1.png

  2. And I'm going to store path of image in database. What should I put in image_path field ex. image_1 or images/image_1 or etc.

  3. How can I get path of image from database and set image to view follow my code in the bottom? Could you guys change it for me?

I already have answer

  1. in case storing image file in file system in assets/images/pic_1.png
  2. In database, "image_path field" , you will put images/pic_1.png in it.
  3. To get and set image: according to Trim's answer.

AND I have fixed the following code according to Trim's answer.

Thanks so much

placeListActivity.class

public class placeListActivity extends ListActivity {
   
    private static MyDB mDbHelper;
    String[] from = new String[] { Constants.COL_TITLE};
    int[] to = new int[] {R.id.list_place_title};
    private Cursor c;

    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        mDbHelper = new MyDB(this);
        mDbHelper.createDatabase();
        mDbHelper.open();
        c = mDbHelper.getAllPlaces();

        
        setListAdapter(new SimpleCursorAdapter(this, 
                  R.layout.list_place, c, 
                  from, to));
        
        final ListView lv = getListView();
          
        
        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                Intent i = new Intent(view.getContext(), Place.class);    
                i.putExtra(Constants.KEY_ID, id);
                i.putExtra(Constants.COL_TITLE, c.getString(
                        c.getColumnIndexOrThrow(Constants.COL_TITLE)));
                i.putExtra(Constants.COL_CONTENT, c.getString(
                        c.getColumnIndexOrThrow(Constants.COL_CONTENT)));
 
                i.putExtra(Constants.COL_IMAGE, c.getString(
                        c.getColumnIndexOrThrow(Constants.COL_IMAGE)));
                
                
                
                startActivity(i);
            
            }
          });
        
        
    }

}

Place.class

public class Place extends Activity {
    
    private TextView title;
    private TextView content;
    private ImageView placeImage;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.detail_place);
        
        title = (TextView) findViewById(R.id.place_title);
        content = (TextView) findViewById(R.id.place_content);

        placeImage = (ImageView) findViewById(R.id.place_image);
        
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
        // reference XML defined views that we will touch in code
        String stringTitle = extras.getString(Constants.COL_TITLE);
        String stringContent = extras.getString(Constants.COL_CONTENT);

        String imageID = extras.getString(Constants.COL_IMAGE);
        
 
        if (title != null) {
            title.setText(stringTitle); 
        }
        if (content != null) {
            content.setText(stringContent);
        }

        /*if (placeImage != null) {
            placeImage.setImageDrawable(Drawable.createFromPath(imageID));
        }*/
        
        if (placeImage != null) {
        
        try {
            InputStream path = getAssets().open(imagePath);
            Bitmap bit = BitmapFactory.decodeStream(path);
            place开发者_运维知识库Image.setImageBitmap(bit);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            }
        }
    }
}


You can put your images under "assets/images" directory. In this case, the path that you will use in getAssets().open(String path) will be like "images/pic_1.png". You can call getAssets() anywhere in your activity. There is also a setImageBitmap(Bitmap bm) method. You can create bitmap from path via BitmapFactory.decodeFile(String path).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜