2012-05-23 121 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(); 

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