2013-10-22 69 views
1

我有一個奇怪的問題 - 它發生在xperia(android 4.0.3)上,但不在三星S plus(2.3.6)上。在應用程序中我使用谷歌地圖APIv2與支持庫(在另一個活動中,不知道是否有問題)。Android中的BitmapFactory.decodeFile和ImageView奇怪的事

我想我已經縮小問題:

private Bitmap bitmap; 
private String st; 
private static final String PHOTO_DIR = "photodir"; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    [...] 
    st = Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR + "/test.jpg"; 
    bitmap = BitmapFactory.decodeFile(st); 
    ImageView im = (ImageView) findViewById(R.id.imv_Photo); 
    im.setImageBitmap(bitmap); 
    [...] 

可正常工作。但這:

@Override 
public void onClick(View v) 
{ 
    try 
    { 
     ImageView im = (ImageView) findViewById(R.id.imv_Photo); 
     String st = Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR + "/test1.jpg"; 
     Bitmap bitmap = BitmapFactory.decodeFile(st); 
     im.setImageBitmap(bitmap); 
    } 
    catch (Exception e) 
    { 
     // null 
    } 
} 

掛起應用(儘管try/catch塊的!)甚至im.setImageBitmap(位圖)去除。當我註釋掉BitmapFactory.decodeFile問題消失。更糟的是,xperia在插入usb時卸載了sd-card,並且我不知道如何將圖片寫入手機內存,所以我無法檢查日誌(btw:是否有辦法在以後獲取日誌?)

當我從onCreate()中刪除代碼時,onClick()只能執行一次。我試圖在解碼之前設置bitmap = null和setImageBitmap(null),但它沒有幫助。

這對我來說似乎很奇怪,因爲三星對於相同的代碼沒有問題。

有沒有解決辦法,或者我做錯了什麼?

+0

也請看看這個代碼:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html –

+0

你可以請把你的'logCat' –

回答

3

做一件事。傳遞到解碼文件之前對圖像進行採樣。檢查下面

BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = 3; 


Bitmap bitmap = BitmapFactory.decodeFile(st,options); 
    im.setImageBitmap(bitmap); 
+0

它作品!我當然需要更多的文檔閱讀,我不知道這些選項。謝謝! – MoonWolf

+0

檢查http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html – Ameer