2009-12-19 54 views
16

Tôi có tệp .gif bên trong thư mục nội dung như nội dung/tệp/android.gif này. khi tôi cố gắng để mở tập tin đó ném một ngoại lệ ở dòng thứ haiMở tệp từ thư mục nội dung trong android

AssetManager mngr=getAssets(); 
InputStream is2=mngr.open("Files/android.gif"); 

như vậy là nó mà tôi đang cố gắng để mở một tập tin hình ảnh mặc dù trước đó cùng mã hoạt động nếu tôi cố gắng để mở một tập tin văn bản? điều gì có thể là vấn đề ở đây.

Trả lời

30

Những dòng đang làm việc perfectly--

InputStream assetInStream=null; 

try { 
    assetInStream=getAssets().open("icon.png"); 
    Bitmap bit=BitmapFactory.decodeStream(assetInStream); 
    img.setImageBitmap(bit); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if(assetInStream!=null) 
    assetInStream.close(); 
} 

Nếu hình ảnh của bạn là rất lớn thì bạn nên mở rộng hình ảnh của bạn trước khi giải mã nó vào Bitmap. See How to display large image efficiently

+3

Luồng AFIK phải được đóng sau khi sử dụng – ruX

+0

@ruX: có vấn đề chính xác – Sameer

1

Không biết nếu mọi thứ đã thay đổi hay không nhưng tôi đã có một ứng dụng trong Android 1.1 đã mở biểu tượng để sau đó hiển thị chúng trong một cái nhìn và tôi đã làm nó như vậy:

BufferedInputStream buf = new BufferedInputStream(mContext.openFileInput(value)); 
Bitmap bitmap = BitmapFactory.decodeStream(buf); 
1

Tôi tin rằng ưa thích cách để làm điều này là đưa hình ảnh của bạn vào thư mục res/drawable. Sau đó, bạn có thể nhận được một Drawable như thế này:

Drawable d = Resources.getSystem().getDrawable(R.drawable.android); 
4

Tôi nghi ngờ bạn đang nhận được khiếu nại về loại ngoại lệ unhandled IOException. Nếu đúng như vậy, bạn cần phải thực hiện cuộc gọi đến mgr.open trong khối try-catch để xử lý ngoại lệ có thể xảy ra khi truy xuất đối tượng InputStream.

AssetManager mngr = getAssets(); 
try { 
    InputStream is2 = mngr.open("Files/android.gif"); 
} catch (final IOException e) { 
    e.printStackTrace(); 
} 
Các vấn đề liên quan