回答編集履歴

3

追記

2015/10/07 07:19

投稿

shiolier
shiolier

スコア1156

test CHANGED
@@ -211,3 +211,45 @@
211
211
 
212
212
 
213
213
  ですので、上に書いたように、`getActivity().finish();`を非同期処理完了時に実行するのがいいと思います。
214
+
215
+
216
+
217
+ ---
218
+
219
+
220
+
221
+
222
+
223
+ `getActivity().finish();`を`postExecute`内に移してみてください。
224
+
225
+
226
+
227
+ ```Java
228
+
229
+ public void onClick(DialogInterface dialog, int which) {
230
+
231
+ AsyncDetail asyncDetail = new AsyncDetail(new AsyncTaskCallback() {
232
+
233
+ @Override
234
+
235
+ public void postExecute(String result) {
236
+
237
+ Intent intent = new Intent(getActivity(), DetailActivity.class);
238
+
239
+ intent.putExtra("result", result);
240
+
241
+ startActivity(intent);
242
+
243
+ getActivity().finish(); // ここに移す
244
+
245
+ }
246
+
247
+ });
248
+
249
+ // getActivity().finish();
250
+
251
+ asyncDetail.execute("URL", id);
252
+
253
+ }
254
+
255
+ ```

2

追記

2015/10/07 07:18

投稿

shiolier
shiolier

スコア1156

test CHANGED
@@ -191,3 +191,23 @@
191
191
  非同期処理開始前に、Activityをfinishしているのに、非同期処理完了時に、`getActivity()`でActivityを取得しようとしています。
192
192
 
193
193
  `getActivity().finish();`を非同期処理完了時に実行するか、別の方法でContextを取得してみてください。
194
+
195
+
196
+
197
+
198
+
199
+ ---
200
+
201
+
202
+
203
+
204
+
205
+ Fragmentのコードを確認したところ、`Fragment#startActivity(Intent)`はFragment自身が設置されているActivityの`Activity#startActivity()`を呼ぶような処理をしています。
206
+
207
+ なので、`Fragment#startActivity(Intent)`を呼ぶ前に、設置されているActivityの`Acitivity#finish()`呼んでしまった場合、`Activity#startActivity()`が呼び出せなくなるのだと思います。
208
+
209
+ 実際のソースコードでは呼ぶ前にnullチェックをしており、nullの場合に件の例外を投げるようになっていました。
210
+
211
+
212
+
213
+ ですので、上に書いたように、`getActivity().finish();`を非同期処理完了時に実行するのがいいと思います。

1

追記

2015/10/04 14:44

投稿

shiolier
shiolier

スコア1156

test CHANGED
@@ -145,3 +145,49 @@
145
145
 
146
146
 
147
147
  `AsyncDetail`にも怪しいコードがありますが、質問内容とは離れるため、ひとまずはノータッチです。すいません。
148
+
149
+
150
+
151
+
152
+
153
+ ---
154
+
155
+
156
+
157
+ 2015/10/4 追記
158
+
159
+ 例外のスタックトレースが無いので、推測になってしまいますが、原因は以下の部分かもしれません。
160
+
161
+ ```Java
162
+
163
+ public void onClick(DialogInterface dialog, int which) {
164
+
165
+ AsyncDetail asyncDetail = new AsyncDetail(new AsyncTaskCallback() {
166
+
167
+ @Override
168
+
169
+ public void postExecute(String result) {
170
+
171
+ Intent intent = new Intent(getActivity(), DetailActivity.class); // ココ
172
+
173
+ intent.putExtra("result", result);
174
+
175
+ startActivity(intent);
176
+
177
+ }
178
+
179
+ });
180
+
181
+ getActivity().finish(); // ココ
182
+
183
+ asyncDetail.execute("URL", id);
184
+
185
+ }
186
+
187
+ ```
188
+
189
+
190
+
191
+ 非同期処理開始前に、Activityをfinishしているのに、非同期処理完了時に、`getActivity()`でActivityを取得しようとしています。
192
+
193
+ `getActivity().finish();`を非同期処理完了時に実行するか、別の方法でContextを取得してみてください。