これは、Facebook Android SDK 3.0 を使用して写真をアップロードするときの断続的な SSL エラーと同様の問題ですが、その質問には回答がありません。質問で詳細を提供したいと思います。
次のコードを使用して、ユーザーの Facebook アカウントに写真をアップロードしようとしています。
ArrayList<Request> requests = new ArrayList<Request>();
for (String id : ids) {
Uri uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Bitmap b;
try {
b = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
} catch (FileNotFoundException e) {
Log.e(LOG_TAG, "Error uploading photo to facebook", e);
return;
} catch (IOException e) {
Log.e(LOG_TAG, "Error uploading photo to facebook", e);
return;
}
if (b != null) {
requests.add(Request.newUploadPhotoRequest(FacebookLoginHelper.getInstance().getActiveSession(), b,
null));
}
}
List<Response> responses = Request.executeBatchAndWait(requests);
for (Response response : responses) {
if (response.getError() == null) {
Log.w(LOG_TAG, "Successfully uploaded image");
} else {
Log.w(LOG_TAG, "Error uploading image: " + response.getError().getErrorMessage());
}
}
次のエラーが表示されます。
02-28 11:26:52.936: W/System.err(5848): javax.net.ssl.SSLException: Write error: ssl=0x72be0428: I/O error during system call, Broken pipe
02-28 11:26:52.936: W/System.err(5848): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_write(Native Method)
02-28 11:26:52.936: W/System.err(5848): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:706)
02-28 11:26:52.936: W/System.err(5848): at libcore.net.http.ChunkedOutputStream.writeHex(ChunkedOutputStream.java:102)
02-28 11:26:52.936: W/System.err(5848): at libcore.net.http.ChunkedOutputStream.writeBufferedChunkToSocket(ChunkedOutputStream.java:128)
02-28 11:26:52.946: W/System.err(5848): at libcore.net.http.ChunkedOutputStream.write(ChunkedOutputStream.java:77)
02-28 11:26:52.946: W/System.err(5848): at java.io.BufferedOutputStream.flushInternal(BufferedOutputStream.java:185)
02-28 11:26:52.946: W/System.err(5848): at java.io.BufferedOutputStream.write(BufferedOutputStream.java:139)
02-28 11:26:52.946: W/System.err(5848): at android.graphics.Bitmap.nativeCompress(Native Method)
02-28 11:26:52.946: W/System.err(5848): at android.graphics.Bitmap.compress(Bitmap.java:875)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request$Serializer.writeBitmap(Request.java:1688)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request$Serializer.writeObject(Request.java:1666)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request.serializeAttachments(Request.java:1569)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request.serializeToUrlConnection(Request.java:1467)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request.toHttpConnection(Request.java:933)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request.executeBatchAndWait(Request.java:1027)
02-28 11:26:52.946: W/System.err(5848): at com.facebook.Request.executeBatchAndWait(Request.java:1003)
02-28 11:26:52.946: W/System.err(5848): at com.mycompany.mypackage.services.FacebookPhotoUploadService.onHandleIntent(FacebookPhotoUploadService.java:50)
02-28 11:26:52.946: W/System.err(5848): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
02-28 11:26:52.946: W/System.err(5848): at android.os.Handler.dispatchMessage(Handler.java:99)
02-28 11:26:52.946: W/System.err(5848): at android.os.Looper.loop(Looper.java:137)
02-28 11:26:52.946: W/System.err(5848): at android.os.HandlerThread.run(HandlerThread.java:60)
02-28 11:26:52.946: D/skia(5848): ------- write threw an exception
02-28 11:26:52.946: W/com.mycompany.mypackage.services.FacebookPhotoUploadService(5848): Error uploading image: com.facebook.FacebookException: could not construct request body
私が確信していること:
- リクエストで送信しているビットマップは有効です
- アクティブなセッションで Facebook に正しくログインしています
約 15 回または 20 回の試行のうち 2 回、これを正常に機能させることができました (ブラウザーで Facebook にアクセスし、そこで画像を表示して確認しました)。
重要ではないと思いますが、これonHandleIntent()
はIntentService
.