3

Facebook AndroidSDK3.0を使用して写真をアルバムにアップロードしています。すべてが機能しますが、最初のアップロードがやや予期しないSSLエラーで失敗することがあります。

Request.javaの関数toHttpConnectionを参照してください。

try {
        connection = createConnection(url);

        serializeToUrlConnection(requests, connection);
    } catch (IOException e) {
        // THIS IS WHERE THE ERROR ORIGINATES FROM!
        throw new FacebookException("could not construct request body", e);
    } catch (JSONException e) {
        throw new FacebookException("could not construct request body", e);
    }

eEclipseでホバーすると、次の情報が表示されます。

javax.net.ssl.SSLException:書き込みエラー:ssl = 0x4f033008:システムコール中のI / Oエラー、パイプの破損javax.net.ssl.SSLException:書き込みエラー:ssl = 0x4f033008:システムコール中のI / Oエラー、パイプの破損書き込みエラー:ssl = 0x4f033008:システムコール中のI / Oエラー、パイプの破損[1277468208、0、1279934152、48、1280860304、26、1280860480、58、1280859576、11、1280859696、4、1277492792、1、1280859640、7 1280233152、169、1280233264、36、1280230744、6、1280236632、0、1280236576、0、1280238568、6、1280238512、2、1278731744、21、1279835640、23、1278097880、2、1279841920、28、1279843376、2、1277300032、 6] null

これはSDKのバグですか?他の誰かがこれに遭遇しましたか?そしてもっと重要なのは、どうすればそれを修正できますか?

4

3 に答える 3

3

この記事に出くわすまで、以前の(削除された)回答に落ち着く準備がほぼ整いました:http://vikaskanani.wordpress.com/2011/01/11/android-upload-image-or-file-using-http -post-multi-part/

私はそれを試してみることにしました、そしてそれはうまくいくようです!これが私のコードです:

for (Bitmap b : bitmaps) {
    // id is just a string
    String response = executeUpload(b, id);

    // do something with the response
}

private String executeUpload(Bitmap b, String id) throws MalformedURLException, IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    b.compress(CompressFormat.PNG, 100, baos);
    byte[] data = baos.toByteArray();

    HttpPost postRequest = new HttpPost("https://graph.facebook.com/me/photos");
    HttpParams params = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(params, 3000);
    HttpClient httpClient = new DefaultHttpClient();
    httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(2, true));

    ByteArrayBody bab = new ByteArrayBody(data, id + ".png");
    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    reqEntity.addPart("access_token", new StringBody(activeFacebookAccessToken));
    reqEntity.addPart("message", new StringBody(""));
    reqEntity.addPart("picture", bab);
    postRequest.setEntity(reqEntity);
    HttpResponse response = httpClient.execute(postRequest);
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    String s;
    StringBuilder builder = new StringBuilder();
    while ((s = reader.readLine()) != null) {
        builder = builder.append(s);
    }

    return builder.toString();
}

上記のリンクで説明したように、最新のものをインストールする必要がありますHttpClient( http://hc.apache.org/downloads.cgiにあります)。

注意すべきもう 1 つの重要な点は、Facebook がサポートする最大画像サイズはいずれのサイズでも 720 ピクセルであることです。私のコードでは、アップロードを行う前にビットマップをそのサイズ制限内にスケーリングしてパフォーマンスを大幅に向上させています。

于 2013-03-06T23:42:42.290 に答える
2

@ i33t: IoException と FacebookException で同じ問題に直面していました..私の場合、問題は UI スレッドでネットワーク操作を実行することでした..

実際にスタックトレースを印刷すると、これが得られます。

解決策: WorkerThreadでこの操作を実行してください。

于 2013-08-29T06:49:15.517 に答える
0

私はこの問題に取り組んでいます。私の Facebook SDK のバージョンは 3.5.2 です。また、この問題は 4.3 OS バージョンの Samsung Note2 でのみ再現できます。

この問題は、1 回成功し、1 回失敗してから 1 回成功し、1 回失敗するように動作するため、非常に奇妙に機能します。

原因例外メッセージは次のとおりです。

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x59b399c8: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x5d887c58:0x00000000)
于 2014-11-21T10:06:43.483 に答える