Я новичок в программировании на Java и Android. Я только что создал простое приложение с формой входа и формой регистрации. Моя форма входа и форма регистрации работают прямо сейчас. Я создал абстрактный класс SignedActivity, который простирается от класса Activity. Я хочу, чтобы каждое действие было доступно после того, как логин наследуется от SignedActivity. Если действие наследуется от SignedActivity, я могу быть уверен, что он доступен только для подписанных пользователей.Аннотация класс расширяет несколько видов деятельности Java и Android
Вот как выглядит 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 вместо активность после входа в систему. Поэтому я должен создать SignedFragmentActivity, который простирается от FragmentActivity, и он в основном такой же, как SignedActivity (только родительский). Итак, у меня есть дубликат кода - как его избежать?
Добро пожаловать в удивительный мир Android и одного наследование! :) – Natix
Единственное наследование устраняет множество сложных проблем. Наслаждайтесь композицией над наследованием (которая обычно делает лучший дизайн в любом случае), и вы будете в порядке. –