質問編集履歴

3

質問修正依頼によりログキャット追加

2016/04/25 04:30

投稿

nasulrj
nasulrj

スコア38

test CHANGED
File without changes
test CHANGED
@@ -525,3 +525,9 @@
525
525
 
526
526
 
527
527
  ```
528
+
529
+ ☆追記
530
+
531
+ すいません、これ以上ここには書けないので下記よりお願いします。
532
+
533
+ https://goo.gl/tnRNAI

2

文字数制限で一部ソース割愛

2016/04/25 04:30

投稿

nasulrj
nasulrj

スコア38

test CHANGED
File without changes
test CHANGED
@@ -516,7 +516,7 @@
516
516
 
517
517
 
518
518
 
519
- ///続く///
519
+
520
520
 
521
521
 
522
522
 

1

ソースコード添付の内容変更、質問の内容変更

2016/04/24 02:12

投稿

nasulrj
nasulrj

スコア38

test CHANGED
@@ -1 +1 @@
1
- Android】Twitter4Jを使って複数の画像を投稿するためにはどうしたらよろしいでしょうか?
1
+ 更新】Twitter4Jを使って複数の画像を投稿するためにはどうしたらよろしいでしょうか?
test CHANGED
@@ -1,8 +1,10 @@
1
+ ###2016/04/24:途中まで完成したので内容を変更しました。
2
+
1
3
  いつも有難うございます。
2
4
 
5
+ 完成まであと一歩のところまで来ましたが、画像を2枚以上添付しボタンを押すとツイートに失敗してしまいます。
6
+
3
- 今添付された複数の画像を投稿しようスを組んるのですが、途中まではわるものの添付された画像のメソッドとツイートのメソッドを別にしているため添付された画像のメッドのURLや添付されてる数をツイートているメソッドにに持ってくることができずに困っています。
7
+ ですが画像を1枚選択するツイトはるのですがなぜか画像添付され状態でツイートされています。
4
-
5
- どのようにしたら実現可能でしょうか?
6
8
 
7
9
  知恵を貸してください、よろしくお願いします。
8
10
 
@@ -10,13 +12,123 @@
10
12
 
11
13
 
12
14
 
13
-
14
-
15
- ###添付された画像のメソッド
15
+ [画像を2枚以上で投稿]
16
+
17
+ [https://gyazo.com/a6a9ddf905c22c54472a91ebc4983161](https://gyazo.com/a6a9ddf905c22c54472a91ebc4983161)
18
+
19
+
20
+
21
+
22
+
23
+ ###ソース[TweetActivity.java]
16
24
 
17
25
  ```java
18
26
 
27
+ public class TweetActivity extends Activity {
28
+
29
+
30
+
31
+ private EditText mInputText;
32
+
33
+ private Twitter mTwitter;
34
+
35
+ private Button mGazou;
36
+
37
+ private ImageView imageView,imageView2,imageView3,imageView4;
38
+
39
+ private Boolean gazou=false;
40
+
41
+ UploadedMedia media1=null;
42
+
43
+ UploadedMedia media2=null;
44
+
45
+ UploadedMedia media3=null;
46
+
47
+ UploadedMedia media4=null;
48
+
49
+ int k =0;
50
+
51
+ Uri[] multi_uri=null;
52
+
53
+ Uri uri = null;
54
+
55
+
56
+
57
+ private static final int RESULT_PICK_IMAGEFILE = 1001;
58
+
59
+
60
+
19
- @Override
61
+ @Override
62
+
63
+ protected void onCreate(Bundle savedInstanceState) {
64
+
65
+ super.onCreate(savedInstanceState);
66
+
67
+ setContentView(R.layout.new_tweet);
68
+
69
+
70
+
71
+ mTwitter = TwitterUtils.getTwitterInstance(this);
72
+
73
+ //Twitter文字入力
74
+
75
+ mInputText = (EditText) findViewById(R.id.input_text);
76
+
77
+ //Twitter画像選択(ギャラリーから)
78
+
79
+ mGazou = (Button)findViewById(R.id.button1);
80
+
81
+ mGazou.setOnClickListener(new View.OnClickListener() {
82
+
83
+ @Override
84
+
85
+ public void onClick(View v) {
86
+
87
+
88
+
89
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
90
+
91
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
92
+
93
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
94
+
95
+ intent.setType("image/*");
96
+
97
+
98
+
99
+ startActivityForResult(intent, RESULT_PICK_IMAGEFILE);
100
+
101
+
102
+
103
+ }
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+ });
112
+
113
+
114
+
115
+ findViewById(R.id.action_tweet).setOnClickListener(new View.OnClickListener() {
116
+
117
+ @Override
118
+
119
+ public void onClick(View v) {
120
+
121
+ tweet();
122
+
123
+ }
124
+
125
+ });
126
+
127
+ }
128
+
129
+
130
+
131
+ @Override
20
132
 
21
133
  public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
22
134
 
@@ -30,17 +142,11 @@
30
142
 
31
143
 
32
144
 
33
- UploadedMedia media1=null;
145
+
34
-
35
- UploadedMedia media2=null;
146
+
36
-
37
- UploadedMedia media3=null;
147
+
38
-
39
- UploadedMedia media4=null;
148
+
40
-
41
-
42
-
43
- Uri uri = null;
149
+
44
150
 
45
151
 
46
152
 
@@ -72,7 +178,7 @@
72
178
 
73
179
  Bitmap bmp =null;
74
180
 
75
- int k = clipData.getItemCount();
181
+ k = clipData.getItemCount();
76
182
 
77
183
  Log.i("", "画像選択: " + String.valueOf(k));
78
184
 
@@ -90,7 +196,7 @@
90
196
 
91
197
  }
92
198
 
93
- Uri[] multi_uri = ( Uri[] )list.toArray( new Uri[0] );
199
+ multi_uri = ( Uri[] )list.toArray( new Uri[0] );
94
200
 
95
201
 
96
202
 
@@ -106,19 +212,7 @@
106
212
 
107
213
  imageView4.setVisibility(View.GONE);
108
214
 
109
- //画像アップロード
215
+
110
-
111
- try {
112
-
113
- media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
114
-
115
- } catch (TwitterException e) {
116
-
117
- // TODO 自動生成された catch ブロック
118
-
119
- e.printStackTrace();
120
-
121
- }
122
216
 
123
217
 
124
218
 
@@ -136,20 +230,6 @@
136
230
 
137
231
 
138
232
 
139
- try {
140
-
141
- media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
142
-
143
- media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
144
-
145
- } catch (TwitterException e) {
146
-
147
- // TODO 自動生成された catch ブロック
148
-
149
- e.printStackTrace();
150
-
151
- }
152
-
153
233
  break;
154
234
 
155
235
  case 3:
@@ -164,21 +244,7 @@
164
244
 
165
245
 
166
246
 
167
- try {
247
+
168
-
169
- media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
170
-
171
- media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
172
-
173
- media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString()));
174
-
175
- } catch (TwitterException e) {
176
-
177
- // TODO 自動生成された catch ブロック
178
-
179
- e.printStackTrace();
180
-
181
- }
182
248
 
183
249
  break;
184
250
 
@@ -194,24 +260,6 @@
194
260
 
195
261
 
196
262
 
197
- try {
198
-
199
- media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
200
-
201
- media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
202
-
203
- media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString()));
204
-
205
- media4 = mTwitter.uploadMedia(new File(multi_uri[3].toString()));
206
-
207
- } catch (TwitterException e) {
208
-
209
- // TODO 自動生成された catch ブロック
210
-
211
- e.printStackTrace();
212
-
213
- }
214
-
215
263
 
216
264
 
217
265
  break;
@@ -262,7 +310,7 @@
262
310
 
263
311
  }
264
312
 
265
-
313
+
266
314
 
267
315
 
268
316
 
@@ -272,108 +320,208 @@
272
320
 
273
321
  }
274
322
 
323
+
324
+
325
+ @Override
326
+
327
+ public boolean onCreateOptionsMenu(Menu menu) {
328
+
329
+ // Inflate the menu; this adds items to the action bar if it is present.
330
+
331
+ getMenuInflater().inflate(R.menu.new_tweet_menu, menu);
332
+
333
+ return true;
334
+
335
+ }
336
+
337
+
338
+
339
+ @Override
340
+
341
+ public boolean onOptionsItemSelected(MenuItem item) {
342
+
343
+ // Handle action bar item clicks here. The action bar will
344
+
345
+ // automatically handle clicks on the Home/Up button, so long
346
+
347
+ // as you specify a parent activity in AndroidManifest.xml.
348
+
349
+ switch (item.getItemId()) {
350
+
351
+ case R.id.menu_not:
352
+
353
+ Intent intent = new Intent(this, MainActivity.class);
354
+
355
+ startActivity(intent);
356
+
357
+ finish();
358
+
359
+ return true;
360
+
361
+ }
362
+
363
+ return super.onOptionsItemSelected(item);
364
+
365
+ }
366
+
367
+
368
+
369
+
370
+
371
+ private void tweet() {
372
+
373
+ AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>() {
374
+
375
+ @Override
376
+
377
+ protected Boolean doInBackground(String... params) {
378
+
379
+ try {
380
+
381
+ long[]mediaIds = new long[k];
382
+
383
+ StatusUpdate update = new StatusUpdate(params[0]);
384
+
385
+
386
+
387
+ //画像アップロード
388
+
389
+ if(gazou==true){
390
+
391
+ switch(k){
392
+
393
+ case 1:
394
+
395
+ try {
396
+
397
+ media1 = mTwitter.uploadMedia(new File(uri.toString()));
398
+
399
+ mediaIds[0]=media1.getMediaId();
400
+
401
+ } catch (TwitterException e) {
402
+
403
+ // TODO 自動生成された catch ブロック
404
+
405
+ e.printStackTrace();
406
+
407
+ }
408
+
409
+ break;
410
+
411
+ case 2:
412
+
413
+ try {
414
+
415
+ media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
416
+
417
+ media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
418
+
419
+ mediaIds[0]=media1.getMediaId();
420
+
421
+ mediaIds[1]=media2.getMediaId();
422
+
423
+ } catch (TwitterException e) {
424
+
425
+ // TODO 自動生成された catch ブロック
426
+
427
+ e.printStackTrace();
428
+
429
+ }
430
+
431
+ break;
432
+
433
+ case 3:
434
+
435
+ try {
436
+
437
+ media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
438
+
439
+ media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
440
+
441
+ media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString()));
442
+
443
+ mediaIds[0]=media1.getMediaId();
444
+
445
+ mediaIds[1]=media2.getMediaId();
446
+
447
+ mediaIds[2]=media3.getMediaId();
448
+
449
+ } catch (TwitterException e) {
450
+
451
+ // TODO 自動生成された catch ブロック
452
+
453
+ e.printStackTrace();
454
+
455
+ }
456
+
457
+ break;
458
+
459
+ case 4:
460
+
461
+
462
+
463
+ try {
464
+
465
+ media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
466
+
467
+ media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
468
+
469
+ media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString()));
470
+
471
+ media4 = mTwitter.uploadMedia(new File(multi_uri[3].toString()));
472
+
473
+ mediaIds[0]=media1.getMediaId();
474
+
475
+ mediaIds[1]=media2.getMediaId();
476
+
477
+ mediaIds[2]=media3.getMediaId();
478
+
479
+ mediaIds[3]=media4.getMediaId();
480
+
481
+ } catch (TwitterException e) {
482
+
483
+ // TODO 自動生成された catch ブロック
484
+
485
+ e.printStackTrace();
486
+
487
+ }
488
+
489
+ }
490
+
491
+ Log.i("ImageTAG", mediaIds.toString());
492
+
493
+ update.setMediaIds(mediaIds);
494
+
495
+ mTwitter.updateStatus(update);
496
+
497
+ }else{
498
+
499
+ mTwitter.updateStatus(params[0]);
500
+
501
+ }
502
+
503
+
504
+
505
+ return true;
506
+
507
+ } catch (TwitterException e) {
508
+
509
+ e.printStackTrace();
510
+
511
+ return false;
512
+
513
+ }
514
+
515
+ }
516
+
517
+
518
+
519
+ ///続く///
520
+
521
+
522
+
523
+ }
524
+
525
+
526
+
275
527
  ```
276
-
277
- ###ツイート部分のメソッド
278
-
279
- ```java
280
-
281
- private void tweet() {
282
-
283
- AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>() {
284
-
285
- @Override
286
-
287
- protected Boolean doInBackground(String... params) {
288
-
289
- try {
290
-
291
- if(gazou){
292
-
293
- StatusUpdate update = new StatusUpdate(params[0]);
294
-
295
- //この辺に添付された画像を持ってくるけどどう組んでいいのか分かりません`
296
-
297
-
298
-
299
-
300
-
301
- mTwitter.updateStatus(update);
302
-
303
- }else{
304
-
305
- mTwitter.updateStatus(params[0]);
306
-
307
- }
308
-
309
-
310
-
311
- return true;
312
-
313
- } catch (TwitterException e) {
314
-
315
- e.printStackTrace();
316
-
317
- return false;
318
-
319
- }
320
-
321
- }
322
-
323
-
324
-
325
- @Override
326
-
327
- protected void onPostExecute(Boolean result) {
328
-
329
- if (result) {
330
-
331
- showToast("ツイートが完了しました!");
332
-
333
- showToast("×ボタンを押して元の画面に戻ってね");
334
-
335
- mInputText.setText("");
336
-
337
-
338
-
339
- } else {
340
-
341
- showToast("ツイートに失敗しました。。。");
342
-
343
- }
344
-
345
- }
346
-
347
- };
348
-
349
- task.execute(mInputText.getText().toString());
350
-
351
- }
352
-
353
-
354
-
355
- private void showToast(String text) {
356
-
357
- Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
358
-
359
- }
360
-
361
- ```
362
-
363
-
364
-
365
- ###試したこと
366
-
367
- [http://qiita.com/takke/items/2d9a426efcedeee5f02f](http://qiita.com/takke/items/2d9a426efcedeee5f02f)
368
-
369
- を参考に`update.getMediaEntities`で組もうとしましたが、`StatusUpdate`だと`getMediaEntities`が使えないので立ち往生しました。
370
-
371
-
372
-
373
- ###補足情報
374
-
375
- **上記2つのメソッドは1つのクラスで定義しています。**
376
-
377
- `gazou`は`boolean`で定義し、画像があるか文字だけなのかを区別しているフラグです。
378
-
379
- Androidの対応OSは4.4.2以降を想定しています。