2012-05-23 120 views
0

我想上傳我自己的圖片/視頻到Facebook和我試圖上傳超過2張圖片,視頻或任何組合時有內存問題。我的設備是HTC Desire的:OutOfMemoryException當做異步請求

Publishvideo

public void publishVideo(Bundle kParameters) { 
final String kDataPath = kParameters.getString("video"); 
kParameters.remove("picture"); 
kParameters.remove("video"); 

byte[] yData = null; 
InputStream kInputStream = null; 

try { 
    kInputStream = new FileInputStream(kDataPath); 
    yData = readBytes(kInputStream); 
    kParameters.putString("token", 
          ms_kFacebookClient.getAccessToken()); 
    kParameters.putByteArray("video", yData); 
    AsyncFacebookRunner kAsyncRunner = new AsyncFacebookRunner(m_kFacebookClient); 
    kAsyncRunner.request("me/videos", 
          kParameters, 
          "POST", 
          new RequestListener(), 
          null); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    FacebookX.ms_bIsUploading = false; 
} catch (IOException e) { 
    e.printStackTrace(); 
    FacebookX.ms_bIsUploading = false; 
} catch (OutOfMemoryError e){ 
    e.printStackTrace(); 
    FacebookX.ms_bIsUploading = false; 
} 
} 

圖片:

public void publishLocalPicture(Bundle kParameters) { 
byte[] yData = null; 

final String kDataPath = kParameters.getString("picture"); 
kParameters.remove("picture"); 
kParameters.remove("video"); 
kParameters.remove("filename"); 

try { 
    Bitmap kBitmap = BitmapFactory.decodeFile(kDataPath); 
    ByteArrayOutputStream kByteArrayOutputStream = new ByteArrayOutputStream(); 
    kBitmap.compress(Bitmap.CompressFormat.JPEG, 
         100, 
         kByteArrayOutputStream); 
    yData = kByteArrayOutputStream.toByteArray(); 

    kParameters.putString("token", 
          ms_kFacebookClient.getAccessToken()); 
    kParameters.putByteArray("picture", yData); 

    AsyncFacebookRunner kAsyncRunner = new AsyncFacebookRunner(m_kFacebookClient); 
    kAsyncRunner.request("me/photos", 
          kParameters, 
          "POST", 
          new RequestListener(), 
          null); 

} catch (OutOfMemoryError e) { 
    e.printStackTrace(); 
    FacebookX.ms_bIsUploading = false; 
} 
} 

的ReadBytes:

public byte[] readBytes(InputStream kInputStream) throws IOException { 
ByteArrayOutputStream kByteBuffer = new ByteArrayOutputStream(); 

int iBufferSize = 1024; 
byte[] yBuffer = new byte[iBufferSize]; 

int iLenght = 0; 
while ((iLenght = kInputStream.read(yBuffer)) != -1) { 
    kByteBuffer.write(yBuffer, 0, iLenght); 
} 

return kByteBuffer.toByteArray(); 
} 

回答

0

顯然,垃圾收集器沒有清潔的資源時,方法完成,所以我在方法結束之前手動完成了。

yBuffer = null; 
kBitmap.recycle(); 
kByteArrayOutputStream.close(); 
kInputStream.close(); 

永遠不要相信垃圾收集器。