gpt4 book ai didi

java - 抽象类扩展了Java和Android的多种类型的 Activity

转载 作者:行者123 更新时间:2023-12-01 13:39:34 25 4
gpt4 key购买 nike

我是 Java 和 Android 编程新手。我刚刚创建了带有登录表单和注册表单的简单应用程序。我的登录表单和注册表单现在可以使用。我创建了从 Activity 类扩展的抽象 SignedActivity 类。我希望登录后可用的每个 Activity 都继承自 SignedActivity。如果 Activity 继承自 SignedActivity,我可以确定它仅适用于签名用户。

这是 SignedActivity 的外观:

public abstract class SignedActivity extends Activity {

public static String LOG_OUT_PATH = "/logOut.php";

private String sessionId;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (savedInstanceState != null) {
String newSessionId = savedInstanceState.getString("sessionId");
if (newSessionId instanceof String) {
sessionId = newSessionId;
return;
}
}
Bundle extras = getIntent().getExtras();
if (extras != null) {
String newSessionId = extras.getString("sessionId");
if (newSessionId instanceof String) {
sessionId = newSessionId;
return;
}
}

finish();
}

public void startSignedActivity(Intent intent) {
intent.putExtra("sessionId", getSessionId());
this.startActivity(intent);
}

protected String getSessionId() {
return sessionId;
}

private void setSessionId(String newSessionId) {
sessionId = newSessionId;
}

protected void logOut() {
new RequestLogOutTask().execute(SignedActivity.LOG_OUT_PATH);
setSessionId("");
Intent intent = new Intent(this, SignInActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("logOut", true);
startActivity(intent);
}

public void onClickLogOut(View v) {
logOut();
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString("sessionId", sessionId);
super.onSaveInstanceState(savedInstanceState);
}

class RequestLogOutTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String... params) {
(new RESTClient(Constants.REST_URL)).post(params[0], "");
return null;
}
}

}

我的问题是登录后有时需要 FragmentActivity 而不是 Activity。所以我必须创建从 FragmentActivity 扩展的 SignedFragmentActivity ,它与 SignedActivity 基本相同(只有父级不同)。所以我有重复的代码 - 如何避免它?

最佳答案

您可以将 SignedActivity 代码移至 ActivityHelper 类:

class ActivityHelper {
public static String initializeSessionId(Bundle savedInstanceState, Activity activity) {
if (savedInstanceState != null) {
String newSessionId = savedInstanceState.getString("sessionId");
if (newSessionId instanceof String) {
return newSessionId;
}
}
Bundle extras = activity.getIntent().getExtras();
if (extras != null) {
String newSessionId = extras.getString("sessionId");
if (newSessionId instanceof String) {
return newSessionId;
}
}
return null;
}

...
}

现在您可以在每个 Activity 实例中使用它(即 FragmentActivity):

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

sessionId = ActivityHelper.initializeSessionId(savedInstanceState, this);

finish();
}
...

关于java - 抽象类扩展了Java和Android的多种类型的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20937784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com