2

これは、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.

4

1 に答える 1

0

Facebook SDK をバイパスし、自分で HTTP 呼び出しを行うことを含む、この問題の解決策を見つけました。詳細はこちら: https://stackoverflow.com/a/15260387/758458

于 2013-03-11T19:07:00.820 に答える