質問するログイン新規登録

回答編集履歴

1

コード例を追加

2017/11/12 11:28

投稿

toris-birds
toris-birds

スコア122

answer CHANGED
@@ -6,4 +6,59 @@
6
6
  リスナーなどについて調べる事をお勧めします。
7
7
 
8
8
  interfaceを使った独自リスナーの作り方
9
- http://android-note.open-memo.net/sub/event__my_listener.html
9
+ http://android-note.open-memo.net/sub/event__my_listener.html
10
+
11
+ ----
12
+ コード例: 書き方は色々あると思います。ビルドを通してないので、typo等あるかもしれません。
13
+
14
+ [呼び出し側]
15
+
16
+ ```
17
+ final MyListener listener = new MyListener() {
18
+ @Override
19
+ public void onMediaIdChanged(final long mediaID) {
20
+ // mediaIDを使う処理
21
+ }
22
+ }
23
+
24
+ twitterUploadImage(mTwitter, filepath, context, listener);
25
+
26
+ // まとめて twitterUploadImage(mTwitter, filepath, context, new MyListener() { ... }); と書くのも可
27
+
28
+ ```
29
+
30
+ [リスナ(名前は適当)]
31
+ ```
32
+ interface MyListener {
33
+ void onMediaIdChanged(final long mediaID)
34
+ }
35
+
36
+ ```
37
+
38
+ [呼ばれる側(改造版、抜粋)]
39
+ ```
40
+ // 戻り値の型 long を void に変更、引数 listener を追加
41
+ public void twitterUploadImage(final Twitter mTwitter, final String filepath, final Context context, final MyListener listener) {
42
+ AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>(){
43
+
44
+ @Override
45
+ protected Boolean doInBackground(String... strings) {
46
+ try {
47
+ //ここで画像をアップロード
48
+ media = mTwitter.uploadMedia(new File(filepath));
49
+ mediaID = media.getMediaId();
50
+ if (listener != null) {
51
+ listener.onMediaIdChanged(mediaID); // ここで返す
52
+ }
53
+ return true;
54
+ } catch (TwitterException e) {
55
+ e.printStackTrace();
56
+ return false;
57
+ }
58
+ }
59
+
60
+ // (省略)
61
+
62
+ // return mediaID; // ここではmediaIDを返さない
63
+ }
64
+ ```