그것은 그런 식으로 할 수있는 잘못된 접근입니다 AsyncTask를 {
private MainActivity callerActivity;
@Override
protected String doInBackground(Object... params) {
String data = (String) params[0];
String cookie = (String) params[1];
callerActivity = (MainActivity) params[2];
...
}
@Override
protected void onPostExecute(String result) {
callerActivity.ProcessHTTPReqAnswer(result);
super.onPostExecute(result);
}
}을 확장합니다. BroadcastReceiver를 사용해야합니다. AsyncTask가 완료되면 결과를 브로드 캐스트로 보냅니다. 각각의 활동은 관심있는 결과를 듣게됩니다. 이렇게하면 아무도 위험한 활동을 참조 할 필요가 없습니다.
다음은 예입니다.
IntentFilter filter = new IntentFilter();
filter.addAction("result1");
LocalBroadcastManager.getInstance(getSupportActivity()).registerReceiver(new CustomBroadcastReceiver(), filter);
은 AsyncTask를에서 위로 활동이
@Override
protected void onPostExecute(String result) {
Intent intent = new Intent("result1").putExtra(
"data", result);
LocalBroadcastManager.getInstance(getSupportActivity()).sendBroadcast(intent);
super.onPostExecute(result);
}
을,이
private class CustomBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if ("result1".equalsIgnoreCase(intent.getAction())) {
String result = bundle.getString("data");
// Process the result here.
}
}
}
My Asynctask는 다른 클래스에서 정의되므로 다른 활동에서 호출 할 수 있습니다. "getSupportActivity()"를 사용하여 주요 활동을 가져올 수 없으며 "컨텍스트"객체를 Asyntask에 전달해야합니다. 그러면 잘 작동합니다. – user652341