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

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

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

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

Android

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

Twitter

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

2637閲覧

【更新】Twitter4Jを使って複数の画像を投稿するためにはどうしたらよろしいでしょうか?

nasulrj

総合スコア38

Java

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

Android

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

Twitter

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/04/23 15:33

編集2016/04/25 04:30

###2016/04/24:途中まで完成したので内容を変更しました。
いつも有難うございます。
完成まであと一歩のところまで来ましたが、画像を2枚以上添付しボタンを押すとツイートに失敗してしまいます。
ですが画像を1枚選択するとツイートはできるのですがなぜか画像が添付されない状態でツイートされています。
知恵を貸してください、よろしくお願いします。

[画像を2枚以上で投稿]
https://gyazo.com/a6a9ddf905c22c54472a91ebc4983161

###ソース[TweetActivity.java]

java

1public class TweetActivity extends Activity { 2 3 private EditText mInputText; 4 private Twitter mTwitter; 5 private Button mGazou; 6 private ImageView imageView,imageView2,imageView3,imageView4; 7 private Boolean gazou=false; 8 UploadedMedia media1=null; 9 UploadedMedia media2=null; 10 UploadedMedia media3=null; 11 UploadedMedia media4=null; 12 int k =0; 13 Uri[] multi_uri=null; 14 Uri uri = null; 15 16 private static final int RESULT_PICK_IMAGEFILE = 1001; 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.new_tweet); 22 23 mTwitter = TwitterUtils.getTwitterInstance(this); 24 //Twitter文字入力 25 mInputText = (EditText) findViewById(R.id.input_text); 26 //Twitter画像選択(ギャラリーから) 27 mGazou = (Button)findViewById(R.id.button1); 28 mGazou.setOnClickListener(new View.OnClickListener() { 29 @Override 30 public void onClick(View v) { 31 32 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 33 intent.addCategory(Intent.CATEGORY_OPENABLE); 34 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 35 intent.setType("image/*"); 36 37 startActivityForResult(intent, RESULT_PICK_IMAGEFILE); 38 39 } 40 41 42 43 }); 44 45 findViewById(R.id.action_tweet).setOnClickListener(new View.OnClickListener() { 46 @Override 47 public void onClick(View v) { 48 tweet(); 49 } 50 }); 51 } 52 53 @Override 54 public void onActivityResult(int requestCode, int resultCode, Intent resultData) { 55 imageView=(ImageView) findViewById(R.id.imageView1); 56 imageView2=(ImageView) findViewById(R.id.imageView2); 57 imageView3=(ImageView) findViewById(R.id.imageView3); 58 imageView4=(ImageView) findViewById(R.id.imageView4); 59 60 61 62 63 64 if (requestCode == RESULT_PICK_IMAGEFILE && resultCode == Activity.RESULT_OK && resultData != null) { 65 gazou=true; 66 uri = resultData.getData(); 67 //Log.i("", "Uri: " + uri.toString()); 68 float size =0.7f; //画像プレビュー画面の表示倍率 69 70 71 if(uri==null){ 72 73 74 //複数選択 75 ClipData clipData = resultData.getClipData(); 76 List list = new ArrayList(); 77 Bitmap bmp =null; 78 k = clipData.getItemCount(); 79 Log.i("", "画像選択: " + String.valueOf(k)); 80 81 for( int i = 0; i < k; i ++ ){ 82 ClipData.Item item = clipData.getItemAt(i); 83 uri = item.getUri(); 84 85 list.add(uri); 86 } 87 multi_uri = ( Uri[] )list.toArray( new Uri[0] ); 88 89 switch(k){ 90 case 1: 91 Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView); 92 imageView2.setVisibility(View.GONE); 93 imageView3.setVisibility(View.GONE); 94 imageView4.setVisibility(View.GONE); 95 96 97 break; 98 case 2: 99 Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView); 100 Glide.with(this).load(multi_uri[1]).thumbnail(size).into(imageView2); 101 imageView3.setVisibility(View.GONE); 102 imageView4.setVisibility(View.GONE); 103 104 break; 105 case 3: 106 Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView); 107 Glide.with(this).load(multi_uri[1]).thumbnail(size).into(imageView2); 108 Glide.with(this).load(multi_uri[2]).thumbnail(size).into(imageView3); 109 imageView4.setVisibility(View.GONE); 110 111 112 break; 113 case 4: 114 Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView); 115 Glide.with(this).load(multi_uri[1]).thumbnail(size).into(imageView2); 116 Glide.with(this).load(multi_uri[2]).thumbnail(size).into(imageView3); 117 Glide.with(this).load(multi_uri[3]).thumbnail(size).into(imageView4); 118 119 120 break; 121 default: 122 showToast("Twitterへの画像投稿は4枚までです"); 123 imageView.setVisibility(View.GONE); 124 imageView2.setVisibility(View.GONE); 125 imageView3.setVisibility(View.GONE); 126 imageView4.setVisibility(View.GONE); 127 gazou=false; 128 break; 129 } 130 131 }else{ 132 gazou=true; 133 Glide.with(this).load(uri).thumbnail(size).into(imageView); 134 imageView2.setVisibility(View.GONE); 135 imageView3.setVisibility(View.GONE); 136 imageView4.setVisibility(View.GONE); 137 try { 138 media1 = mTwitter.uploadMedia(new File(uri.toString())); 139 } catch (TwitterException e) { 140 // TODO 自動生成された catch ブロック 141 e.printStackTrace(); 142 } 143 } 144 145 146 } 147 148 } 149 150 @Override 151 public boolean onCreateOptionsMenu(Menu menu) { 152 // Inflate the menu; this adds items to the action bar if it is present. 153 getMenuInflater().inflate(R.menu.new_tweet_menu, menu); 154 return true; 155 } 156 157 @Override 158 public boolean onOptionsItemSelected(MenuItem item) { 159 // Handle action bar item clicks here. The action bar will 160 // automatically handle clicks on the Home/Up button, so long 161 // as you specify a parent activity in AndroidManifest.xml. 162 switch (item.getItemId()) { 163 case R.id.menu_not: 164 Intent intent = new Intent(this, MainActivity.class); 165 startActivity(intent); 166 finish(); 167 return true; 168 } 169 return super.onOptionsItemSelected(item); 170 } 171 172 173 private void tweet() { 174 AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>() { 175 @Override 176 protected Boolean doInBackground(String... params) { 177 try { 178 long[]mediaIds = new long[k]; 179 StatusUpdate update = new StatusUpdate(params[0]); 180 181 //画像アップロード 182 if(gazou==true){ 183 switch(k){ 184 case 1: 185 try { 186 media1 = mTwitter.uploadMedia(new File(uri.toString())); 187 mediaIds[0]=media1.getMediaId(); 188 } catch (TwitterException e) { 189 // TODO 自動生成された catch ブロック 190 e.printStackTrace(); 191 } 192 break; 193 case 2: 194 try { 195 media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString())); 196 media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString())); 197 mediaIds[0]=media1.getMediaId(); 198 mediaIds[1]=media2.getMediaId(); 199 } catch (TwitterException e) { 200 // TODO 自動生成された catch ブロック 201 e.printStackTrace(); 202 } 203 break; 204 case 3: 205 try { 206 media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString())); 207 media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString())); 208 media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString())); 209 mediaIds[0]=media1.getMediaId(); 210 mediaIds[1]=media2.getMediaId(); 211 mediaIds[2]=media3.getMediaId(); 212 } catch (TwitterException e) { 213 // TODO 自動生成された catch ブロック 214 e.printStackTrace(); 215 } 216 break; 217 case 4: 218 219 try { 220 media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString())); 221 media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString())); 222 media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString())); 223 media4 = mTwitter.uploadMedia(new File(multi_uri[3].toString())); 224 mediaIds[0]=media1.getMediaId(); 225 mediaIds[1]=media2.getMediaId(); 226 mediaIds[2]=media3.getMediaId(); 227 mediaIds[3]=media4.getMediaId(); 228 } catch (TwitterException e) { 229 // TODO 自動生成された catch ブロック 230 e.printStackTrace(); 231 } 232 } 233 Log.i("ImageTAG", mediaIds.toString()); 234 update.setMediaIds(mediaIds); 235 mTwitter.updateStatus(update); 236 }else{ 237 mTwitter.updateStatus(params[0]); 238 } 239 240 return true; 241 } catch (TwitterException e) { 242 e.printStackTrace(); 243 return false; 244 } 245 } 246 247 248 249} 250

☆追記
すいません、これ以上ここには書けないので下記よりお願いします。
https://goo.gl/tnRNAI

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

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

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

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

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

fuzzball

2016/04/25 01:59

「ツイートに失敗しました」のメッセージはどういうときに表示されるのか教えて下さい。また、アップロードに成功しているかどうか(mediaIdsのログ)教えて下さい。
nasulrj

2016/04/25 04:31

有難うございます。字数制限に引っかかり編集がうまくできなかったため、ログキャットを上記URL先に置きました。 よろしくお願いします。
guest

回答1

0

ベストアンサー

Android/Javaともに分からないのでボンヤリ回答になりますが、

ログでいきなり、

content:/com.android.providers.media.documents/document/image%3A37194 is not found.

と表示されていることから、画像ファイルを読み込めていない(APIに渡せていない)のではないでしょうか?Twitter APIからBad Requestが返ってきています。

400:The request was invalid. An accompanying error message will explain why. This is the status code will be returned during version 1.0 rate limiting(https://dev.twitter.com/pages/rate-limiting). In API v1.1, a request without authentication is considered invalid and you will get this response.

media_idが見つからず。(画像を渡せていないので当然?)

message - A media id was not found.

まずは、画像をAPIに渡すところから見直してみてはどうでしょうか?

投稿2016/04/25 04:57

編集2016/04/25 04:59
fuzzball

総合スコア16731

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

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

nasulrj

2016/04/25 06:35

回答有難うございます。 APIを中心に見直していきたいと思います。
fuzzball

2016/04/25 08:53

私もちょっとチャレンジしていたのですが、getOAuthRequestToken()で落ちてしまってツイートするところまで辿り着けませんでしたw
nasulrj

2016/04/26 11:29

有難うございます┏○))ペコり 何とか複数画像でツイートできるところまでできました。 残りは1枚選択した時の処理を入れれば完成になります。 大変良い勉強になりました。
fuzzball

2016/04/26 13:44

順調に進んでいるようで何よりです。 私もようやくgetOAuthRequestToken()で落ちないようになってPINコードの表示まで出来ましたw(落ちていたのはManifestでインターネットを許可してなかったのが原因‥)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問