質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

Android twitter 画像付きツイート 遅い

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 1,004

chart111

score 5

開発環境はAndroid Studioで言語はJavaでTwitterクライアントを作成しています。
Twitterのライブラリとしては公式のTwitterKit3.Xを使用しております。
http://bagpack.hatenablog.jp/entry/2015/05/15/115212を参考に公式のTwitterKitを拡張しました。

画像付きツイートをしたく実装して、成功したのですが、画像アップロードまでに時間がかかりすぎてしまいます。
アルバムから画像取得→bitmapに変換→byte配列→base64に変換の流れでTwitteにアップロードしています。

今回API仕様(https://syncer.jp/Web/API/Twitter/REST_API/POST/media/upload/)を見てパラメータmedia_dataにbase64化したものを送っています。
base64にするまでに時間がかかっているのかもしれません、どうやれば高速にできるのでしょうか。。
他のTwitterクライアントでやってみるとすぐアップロードされていてすぐツイートができます。

補足
API仕様を見ると他の選択肢としてパラメータmediaに画像の、生のバイナリデータを送るというものがありましたが生のバイナリデータがわからず・・・

// 遷移先から戻ってきたとき(今回ギャラリーから)
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent resultData) {

        if (requestCode == READ_IMAGE_CODE && resultCode == Activity.RESULT_OK) {

            if (resultData != null) {

                // 非同期
                new AsyncTask<String,String,String>() {

                    @Override
                    protected String doInBackground(String... string) {
                        Uri uri = resultData.getData();
                        Bitmap bitmap = null;
                        try {
                            bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
                        byte[] byteArray = byteArrayOutputStream .toByteArray();

                        mediaUpload(Base64.encodeToString(byteArray, Base64.NO_WRAP));

                        return null;
                    }
                }.execute();


            }
        }
    }

    // 画像アップロード
    private void mediaUpload(String base64) {
        Log.v("base64",base64);
        CustomApiClient customApiClient = new CustomApiClient(TwitterCore.getInstance().getSessionManager().getActiveSession());
        CustomService customService = customApiClient.getCustomService();

        // 第一引数 media 第二引数 media_data 第三引数 additional_owners
        Call<Media> call = customService.upload(null,base64,null);
        call.enqueue(new Callback<Media>() {
            @Override
            public void success(Result<Media> result) {
                Log.v("mediaUploadResult","success");
                // 画像アップロードに成功したら取得したメディアIDを引数に入れツイートする
            }
            @Override
            public void failure(TwitterException exception) {
                Log.v("mediaUploadResult","failure");
            }
        });
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • umyu

    2018/03/07 22:03 編集

    要件がスクリーンショットの内容記録ツィートなので、画像リサイズを行わずにそのまま投稿してますね。ツィッターに投稿した元画像はツィッターの画像のリンク:origで表示できます。例)https://pbs.twimg.com/media/ランダムなID.jpg:orig

    キャンセル

  • umyu

    2018/03/07 22:14

    容量が大きいという言葉が気になったのでご存知かもしれませんが、公式のmedia-best-practices https://developer.twitter.com/en/docs/media/upload-media/uploading-media/media-best-practices があります。

    キャンセル

  • chart111

    2018/03/07 22:25

    そうなのですね。 元画像 幅:5504 高さ:3096のものを投稿して、:origで表示したものを保存して見てみると 幅1152 高さ2048でリサイズされており、幅高さ逆転してて謎です。。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる