Исходя из моего понимания, вам нужна однократная настройка. Ваш код в порядке, единственная проблема, которую я вижу, состоит в том, что когда вы снова открываете приложение, оно начинается с самого начала. Это связано с тем, что в вашем коде нет логики, чтобы проверить, выполнили ли вы одноразовую настройку. Для этого вы можете использовать SharedPreference
.
Вы можете создать Splash Activity и проверить, выполнена ли разовая настройка или нет на основе логического флага.
Итак, в первый раз пользователь открывает приложение
blockquote>
SplashActivity -> NewUserActivity ---> GameChooseActivity
в противном случае
[ 1110] SplashActivity -> GameChooseActivitySplashActivity extends AppcompatActivity{ boolean hasDoneSetUp = false; private SharedPreferences pref; private Editor editor; protected void onCreate(Bundle sis) { super.onCreate(sis); setContentView(R.layout.splash); pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); editor = pref.edit(); hasDoneSetUp = checkForSetUp(); if(!hasDoneSetUp) startOneTimeSetUp(); else startGameChooseActivity(); } }
Как выполнить одноразовую настройку?
Установите
hasDoneSetUp
значение true, когда будет выполнена одноразовая настройка, и сохраните это значение. вSharedPreference
, чтобы при повторном открытии приложения проверялось, была ли выполнена однократная настройка или нет.Сохраните ваши другие данные в SharedPreference или SQLiteDatabase и получите эти данные в GameChooseActivity.
public void startOneTimeSetUp(){ if(!TextUtils.isEmpty(editUsername.getText().toString().trim())) { uploadUserData(); Intent intent = new Intent(SplashActivity.this, GameChooseActivity.class); SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); Editor editor = pref.edit(); editor.putBoolean("hasDoneSetup", true); editor.commit(); finish(); } } public boolean checkForSetUp(){ return pref.getBoolean("hasDoneSetup", true); } public void startGameChooseActivity(){ Intent intent = new Intent(SplashActivity.this, GameChooseActivity.class); startActivity(intent); }
Соответствующие ссылки
Если вы не знаете Что такое SharedPreference?
Если вы не знаете, как использовать SharedPreference [ 116] отметьте это
SELECT id_student, id_class, grade,
@student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn,
@class:=id_class AS clset
FROM
(SELECT @student:= -1) s,
(SELECT @class:= -1) c,
(SELECT *
FROM mytable
ORDER BY id_class, id_student
) t
Это работает очень простым способом:
id_class
первый, 112-секундный. @student
и @class
инициализируются к -1
@class
, используется, чтобы протестировать, если следующий набор вводится. Если предыдущее значение id_class
(который хранится в @class
) не равно текущему значению (который хранится в id_class
), эти @student
обнуляется. Иначе, увеличен. @class
присвоен с новым значением [1 112], и оно будет использоваться в тесте на шаге 3 в следующей строке. Я сделал некоторый поиск, найденный эта статья для предложения этого решения:
SELECT S2.*,
FIND_IN_SET(
S2.GRADE
, (
SELECT GROUP_CONCAT(GRADE ORDER BY GRADE DESC)
FROM Students S1
WHERE S1.ID_CLASS = S2.ID_CLASS
)
) AS RANK
FROM Students S2 ORDER BY ID_CLASS, GRADE DESC;
Какие-либо мысли, на которых лучше?
Измененный сверху, это работает, но его более сложное, чем я думаю, что это должно быть:
SELECT ID_STUDENT, ID_CLASS, GRADE, RANK
FROM
(SELECT ID_STUDENT, ID_CLASS, GRADE,
@student:=CASE WHEN @class <> id_class THEN 1 ELSE @student+1 END AS RANK,
@class:=id_class AS CLASS
FROM
(SELECT @student:= 0) AS s,
(SELECT @class:= 0) AS c,
(SELECT *
FROM Students
ORDER BY ID_CLASS, GRADE DESC
) AS temp
) AS temp2