質問編集履歴

2

コールバックを実装

2017/03/18 15:23

投稿

takg
takg

スコア125

test CHANGED
File without changes
test CHANGED
@@ -16,37 +16,65 @@
16
16
 
17
17
 
18
18
 
19
- @Override
19
+ @Override
20
20
 
21
- protected String[][] doInBackground(String... params) {
21
+ protected String[][] doInBackground(String... params) {
22
22
 
23
23
 
24
24
 
25
- //通信処理
25
+ //通信処理
26
26
 
27
27
 
28
28
 
29
- //通信処理によって取得したString型の多次元配列
29
+ //通信処理によって取得したString型の多次元配列
30
30
 
31
- return result;
31
+ return result;
32
32
 
33
- }
33
+ }
34
34
 
35
35
 
36
36
 
37
- @Override
37
+ @Override
38
38
 
39
- protected void onPostExecute (String[][] result){
39
+ protected void onPostExecute (String[][] result){
40
+
41
+ callbacktask.CallBack(result);
40
42
 
41
43
 
42
44
 
43
- //UIの処理
45
+ //UIの処理
44
46
 
45
- }
47
+ }
46
48
 
47
49
 
48
50
 
49
51
 
52
+
53
+ public void setOnCallBack(CallBackTask _cbj) {
54
+
55
+ callbacktask = _cbj;
56
+
57
+ }
58
+
59
+
60
+
61
+
62
+
63
+ /**
64
+
65
+ * コールバック用のstaticなclass
66
+
67
+ */
68
+
69
+ public static class CallBackTask {
70
+
71
+ public void CallBack(String[][] result) {
72
+
73
+ }
74
+
75
+ }
76
+
77
+ }
50
78
 
51
79
 
52
80
 
@@ -56,7 +84,7 @@
56
84
 
57
85
  public class MainActivity extends AppCompatActivity {
58
86
 
59
- private String[][] result = {{},{}}; <- このフィールドを非同期処理によって得たString[][]の値に更新したい
87
+ private String[][] arrays = {{},{}}; <- このフィールドを非同期処理によって得たString[][]の値に更新したい
60
88
 
61
89
 
62
90
 
@@ -64,10 +92,48 @@
64
92
 
65
93
 
66
94
 
95
+ @Override
67
96
 
68
-
97
+ public void onClick (View v){
69
-
70
98
 
71
99
 
72
100
 
101
+ //略
102
+
103
+
104
+
105
+ LocationGet locationGet = new LocationGet();
106
+
107
+ locationGet.setOnCallBack(new LocationGet.CallBackTask(){
108
+
109
+
110
+
111
+ @Override
112
+
113
+ public void CallBack(String[][] result) {
114
+
115
+ super.CallBack(result);
116
+
117
+ // resultにはdoInBackgroundの返り値が入ります。
118
+
119
+ // ここからAsyncTask処理後の処理を記述します。
120
+
121
+ arrays = result;
122
+
123
+ }
124
+
125
+
126
+
127
+ });
128
+
129
+
130
+
131
+ locationGet.execute();
132
+
133
+ }
134
+
73
135
  ```
136
+
137
+
138
+
139
+ 変更(2017.03.19):http://qiita.com/a_nishimura/items/1548e02b96bebd0d43e4を参考にコールバックを実装

1

コードを追加しました

2017/03/18 15:23

投稿

takg
takg

スコア125

test CHANGED
File without changes
test CHANGED
@@ -3,3 +3,71 @@
3
3
  AsyncTaskクラス内のdoInBackgroundメソッドで、
4
4
 
5
5
  通信処理により得た値をUIを介さずに別のクラスに受け渡したいと考えているのですが、なにか良い方法ございましたらご教授下さい。
6
+
7
+
8
+
9
+ ```java
10
+
11
+ @AsyncTaskクラス
12
+
13
+
14
+
15
+ public class LocationGet extends AsyncTask<String, Void, String[][]> {
16
+
17
+
18
+
19
+ @Override
20
+
21
+ protected String[][] doInBackground(String... params) {
22
+
23
+
24
+
25
+ //通信処理
26
+
27
+
28
+
29
+ //通信処理によって取得したString型の多次元配列
30
+
31
+ return result;
32
+
33
+ }
34
+
35
+
36
+
37
+ @Override
38
+
39
+ protected void onPostExecute (String[][] result){
40
+
41
+
42
+
43
+ //UIの処理
44
+
45
+ }
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+ @MainActivity
54
+
55
+
56
+
57
+ public class MainActivity extends AppCompatActivity {
58
+
59
+ private String[][] result = {{},{}}; <- このフィールドを非同期処理によって得たString[][]の値に更新したい
60
+
61
+
62
+
63
+ //略
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+ ```