Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 执行异步请求时OutOfMemoryException_Android_Facebook_Asynchronous - Fatal编程技术网

Android 执行异步请求时OutOfMemoryException

Android 执行异步请求时OutOfMemoryException,android,facebook,asynchronous,Android,Facebook,Asynchronous,我正在尝试将自己的图片/视频上传到facebook,当我尝试上传2张以上的图片、视频或任何组合时,我的内存出现问题。我的设备是HTC Desire: 出版视频 public void publishVideo( Bundle kParameters) { final String kDataPath = kParameters.getString( "video"); kParameters.remove( "picture"); kParameters.remove( "video"); b

我正在尝试将自己的图片/视频上传到facebook,当我尝试上传2张以上的图片、视频或任何组合时,我的内存出现问题。我的设备是HTC Desire:

出版视频

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;
}
}
读取字节:

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();
}

显然,当方法完成时,垃圾收集器没有清理资源,所以我在方法结束前手动清理

yBuffer = null;
kBitmap.recycle();
kByteArrayOutputStream.close();
kInputStream.close();
永远不要相信垃圾收集器