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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

341閲覧

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

chart111

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2018/03/04 12:53

開発環境は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"); } }); }

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umyu

2018/03/06 13:52 編集

そのライブラリを使ったことがないのでこちらで。 画像を投稿可能なツィッターClientは作成したことがあります。1,まず各処理のどの部分で時間が掛かっているのかをLog.vで調べてみては?2,mediaUploadのコメント(第一引数 media)を見る限りでは、mediaUploadの引数を変更して、customService.uploadの第一引数にbyteArray を設定する形になるのでは。https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload.html
chart111

2018/03/07 12:53 編集

ご回答ありがとうございます。 1ですが、やはりbase64にするのに時間がかかるかGCが頻発してアップに失敗します。調べたところ画像の容量が大きいとそうなるそうです。公式ツイッターでも画像アップしてみたら画像のサイズがリサイズされて容量が小さくなっていましたいました。リサイズ処理必要なのですね。。 2ですが、第一引数、第二引数どちらかが必須で、第一引数nullですが必須である第二引数にbase64を渡せているので大丈夫そうです。このサイトでは第一引数のみhttps://qiita.com/u_nation/items/618e8b4353f02cff53baこのサイトを見ると、3.xでは拡張しなくても画像upload公式で対応してました。。    umyuさんも画像リサイズしたりしていますでしょうか。
umyu

2018/03/07 13:10 編集

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

2018/03/07 13:25

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問