【发布时间】:2018-07-11 15:28:26
【问题描述】:
我遇到了一点架构问题。
我创建了一个名为 BaseActivity.java 的抽象 Activity 类 在这个活动中,我把我的业务逻辑登录调用等。
这是基本的 BaseActivity 代码:
abstract class BaseActivity extends AppCompatActivity implements BaseActivityInterface {
protected ApiParameters apiParameters;
private BaseActivityInterface calledActivity;
protected void getLoggedUser(BaseActivityInterface calledActivity) {
this.calledActivity = calledActivity;
GetLoggedUserTask getLoggedUserTask = new GetLoggedUserTask(this.apiParameters, BaseActivity.this);
getLoggedUserTask.execute(Utility.LOGIN_URL);
}
@Override
public void updateActivity(JSONObject response) throws JSONException {
if (response.getInt("status") == HttpURLConnection.HTTP_OK) {
this.initUserObject(response);
if (this.calledActivity != null) {
this.calledActivity.updateActivity(response);
}
} else {
Toast.makeText(this, response.getString("message"), Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, LoginActivity.class);
this.startActivity(intent);
finish();
}
}
}
这是名为 GetLoggedUserTask 的 AsyncTask:
public class GetLoggedUserTask extends AsyncTask<String, BaseActivityInterface, String> {
private ApiParameters apiParameters;
private BaseActivityInterface response;
public GetLoggedUserTask(ApiParameters apiParameters, BaseActivityInterface response) {
this.apiParameters = apiParameters;
this.response = response;
}
这是我的 BaseActivity 的子类 CustomerActivity
public class CustomersActivity extends BaseActivity implements BaseActivityInterface {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.getLoggedUser(CustomersActivity.this);
}
@Override
public void updateActivity(JSONObject loginResult) throws JSONException {
.....
}
}
最后是我的接口 BaseActivityInterface
public interface BaseActivityInterface extends Serializable {
void updateActivity(JSONObject loginResult) throws JSONException;
}
流程应该是:启动 CustomerActivity.java,传递 super 以执行 getLoggetUser() 并从 super BaseActivity 启动 AsyncTask。这是热点:
当我传入 asyncTask 构造“BaseActivity.this”并进行调试时,GetLoggedUserTask 中“response”元素的引用被引用到子 CustomerActivity:
我哪里做错了?
【问题讨论】:
标签: java android inheritance mobile android-asynctask