Страница 1 из 1
Android
Добавлено: 05 авг 2015, 10:34
alexeim
в моей App есть логин
Код: Выделить всё
public class LoginActivity extends Activity implements LoaderCallbacks<Cursor>
{
private static int activities = 0;
public void onCreate(Bundle savedInstanceState, String clase) {
super.onCreate(savedInstanceState);
}
protected void onRestart()
{
super.onRestart();
if(activities == 0){
Log.i("APP","BACK FROM BACKGROUND");
}
}
protected void onStop(){
super.onStop();
activities = activities - 1;
}
protected void onStart(){
super.onStart();
activities = activities + 1;
}
.............................
Код: Выделить всё
@Override
protected Boolean doInBackground(Void... params)
{
try
{
AppLogic.getInstance().doLogin(mEmail,mPassword,new NetworkCallBacks()
{
@Override
public void onResponse(Object response)
{
AppLogic.getInstance().showTasks(LoginActivity.this);
showProgress(false);
}
@Override
public void onErrorResponse(VolleyError error)
{
showProgress(false);
}
});
}
catch (Exception e)
{
return false;
}
return true;
}
не получается сделать автоматический logout если нет Activity в течении 15 минут .
пытался сделать так :
Код: Выделить всё
try {
// Simulate network access.
Thread.sleep(2000);
}
catch (InterruptedException e) {
return false;
не получается.
помогите пожалуйсто.спасибо
Re: Android
Добавлено: 05 авг 2015, 10:36
doter.ua
Сделай alarm который проверяет сохраненную дату (timestamp) спустя 15 мин и планирует себе подобного.
Re: Android
Добавлено: 05 авг 2015, 11:32
alexeim
я новичок в программирование вы не могли бы написать пример или подробнее объяснить как именно это сделать?
Re: Android
Добавлено: 05 авг 2015, 11:57
Mikhail_dev
Тогда и нечего лезть в андроид. Идите подучите Java
viewtopic.php?f=51&t=3408
Re: Android
Добавлено: 05 авг 2015, 12:28
alexeim
ну во первых очень не приятно что в России до сих пор не перевелись такие как вы : самоуверенные и мягко говоря не умные люди хотя наверное к людям вас относить не правильно !
если вы не хотите помочь так просто не надо ничего писать а не оскорблять других!!!
а ваша статья - чушь, и все кто хочет научится новому им не нужно помогать - так не сидите на форумах!
форум не только для тех кто уже программист с Большой буквы а так же для тех кто хочет научиться!!!
Re: Android
Добавлено: 05 авг 2015, 12:45
klblk
0) Вам ничего плохого не сказали. Учить вначале нужно Java, а уже потом начинать изучать Android.
1) Ваша проблема не ясна:
- что значит "если нет Activity в течении 15 минут"
- если нужно 15 минут, то почему Thread.sleep на 2 секунды, и вообще где вы его пытаетесь вызывать
2) Вам сказали ключевое слово "alarm", ни уже ли так сложно поискать самому примеры кода в интернете или даже найти
урок на этом сайте? Зачем сразу кого-то что-то заставлять делать за вас?
3) Ну и если уж взялись создавать тему на форуме, то будьте добры называть ее корректно, кратко излагая суть проблемы.
Re: Android
Добавлено: 05 авг 2015, 13:13
doter.ua
alexeim писал(а):мягко говоря не умные люди хотя наверное к людям вас относить не правильно !
ахахах, удачи поработать в команде.
Re: Android
Добавлено: 05 авг 2015, 13:43
Mikhail_dev
ну во первых очень не приятно что в России до сих пор не перевелись такие как вы : самоуверенные и мягко говоря не умные люди хотя наверное к людям вас относить не правильно !
Я для таких как вы (новичков, которые идут в андроид, минуя Java) написал заметку, потратив своё время. Также если посмотрите мои сообщения, то поймёте, что я набил 2 тысячи сообщений не такими постами, с которым обратился к вам, и вебинары записал для новичков тоже не от злости на них. Значит быть может дело в другом? Быть может просто знающие лучше знают как лучше учиться?
У меня друг с айтишника на программиста переучивается. Я ему сразу сказал, что делать в андроиде нечего, пока не изучишь Java SE, чему сейчас я его и обучаю.
У вас три куска кода, непонятно как связанных. Вы не описали как и что вы делаете. Правильно поставленный вопрос = 50 процентов ответа. Thread.sleep, который как бы вообще не относится ни к чему, говорит о том, что вы похоже вообще где-то нашли этот код и сюда его вставили. И при этом вы еще говорите "как жаль что вы еще не перевелись". Жаль будет вам, если мы переведёмся.
Re: Android
Добавлено: 05 авг 2015, 14:01
alexeim
никто минуя java никуда не идет ваше потраченое время на глупости это ваше личное дело
если вам не понятен вопрос то так и надо сказать!
а не посылать учить java
java учить надо я согласен. но вы не знаете, что я знаю а что нет, если вам не хочться отвечать и помогать то не надо ! вас не кто не застовляет ,но выражения выбирать я вам рекомендую ! А если вы считаете что закончив Приборостроительный техникум и Государственный Университет дает вам права так разговаривать то вы ошибаетесь! и мне жаль вашего друга которого вы обучаете судя по вашей логике - вот тебе книга иди учи как выучишь - приходи! Так что ли ?
Re: Android
Добавлено: 05 авг 2015, 14:20
Mikhail_dev
никто минуя java никуда не идет ваше потраченое время на глупости это ваше личное дело
Вам даже лень запятые ставить, теперь я понимаю почему вы не знаете Java.
java учить надо я согласен. но вы не знаете, что я знаю а что нет
по тому коду что вы привели это очень хорошо заметно. Разве только это не ваш коварный план ввести нас в заблуждение.
а не посылать учить java
java учить надо я согласен. но вы не знаете, что я знаю а что нет, если вам не хочться отвечать и помогать то не надо ! вас не кто не застовляет ,но выражения выбирать я вам рекомендую ! А если вы считаете что закончив Приборостроительный техникум и Государственный Университет дает вам права так разговаривать то вы ошибаетесь! и мне жаль вашего друга которого вы обучаете судя по вашей логике - вот тебе книга иди учи как выучишь - приходи! Так что ли ?
Господи, что за бред вы пишете. Мало того, что я не оскорблял вас, так еще и мою учебу привели. Учеба тут причем? Причем тут мой друг? Вы просто мастер делать выводы, основываясь на своих субъективных мыслях. Раз вы пишете на форуме, то я могу ответить на ваше сообщение так, как считаю нужным.
И почему вы так ненавидите запятые? Они вам тоже дорогу перешли? Ну я конечно понимаю, они вообще никакое учебное заведение не оканчивали, а лишь мешаются в тексте.
И всё же, может вы наконец-то напишете более подробно, что и как делает ваш код? Что в конце концов вы хотите сделать. Для чего Thread.sleep на 2 секунды , что это за запрос и где он обрабатывается. Форум для подсказок, помощи в наведении туда, куда надо смотреть и подобное. Код за вас писать не будут.
Re: Android
Добавлено: 05 авг 2015, 14:27
alexeim
все понятно вы считаете себя самым умным, удачи вам !
но может когда нибудь вы повзрослеете. а по поводу ошибок извените я давно уже не живу в России.
Re: Android
Добавлено: 05 авг 2015, 14:28
Mikhail_dev
Ну хорошо, не из России. Но вы можете сформулировать ваш вопрос более подробно?
И всё же, может вы наконец-то напишете более подробно, что и как делает ваш код? Что в конце концов вы хотите сделать. Для чего Thread.sleep на 2 секунды , что это за запрос и где он обрабатывается. Форум для подсказок, помощи в наведении туда, куда надо смотреть и подобное. Код за вас писать не будут.
Re: Android
Добавлено: 05 авг 2015, 14:44
alexeim
при входе в APP есть Login : UserName and Pass. после того как зашел
(например проверка банковского счета ) не делая Logout оставил телефон(нет никаких действий в APP)
Вопрос: как мне сделать чтобы через 15 мин автоматический APP сделала Logout?
это класс LoginActivity может так будет более понятно
Код: Выделить всё
/**
* A login screen that offers login via email/password.
*/
public class LoginActivity extends Activity implements LoaderCallbacks<Cursor>
{
private static int activities = 0;
public void onCreate(Bundle savedInstanceState, String clase) {
super.onCreate(savedInstanceState);
}
protected void onRestart()
{
super.onRestart();
if(activities == 0){
Log.i("APP","BACK FROM BACKGROUND");
}
}
protected void onStop(){
super.onStop();
activities = activities - 1;
}
protected void onStart(){
super.onStart();
activities = activities + 1;
}
/**
* Keep track of the login task to ensure we can cancel it if requested.
*/
private UserLoginTask mAuthTask = null;
// UI references.
private AutoCompleteTextView mEmailView;
private EditText mPasswordView;
private TextView mVersionLbl;
@Override
protected void onResume()
{
super.onResume();
AppLogic.getInstance().setContext(this);
}
@Override
protected void onPause()
{
super.onPause();
AppLogic.hideProgressBar();
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
AppLogic.getInstance().setContext(this);
// Set up the login form.
mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
// populateAutoComplete();
mVersionLbl = (TextView)findViewById(R.id.versionLbl);
try
{
mVersionLbl.setText(getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName);
}
catch (Exception e)
{
Log.e("LoginActivity", e.getLocalizedMessage());
}
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent)
{
attemptLogin();
return true;
}
});
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
mEmailSignInButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
attemptLogin();
}
});
mEmailSignInButton.setOnLongClickListener(new View.OnLongClickListener()
{
@Override
public boolean onLongClick(View v)
{
AppLogic.getInstance().showSettings(LoginActivity.this);
return true;
}
});
AppLogic.hideKeyboard(mEmailView);
AppLogic.updateMunicipalIDFromSettings();
if (AppData.sRashutID.equalsIgnoreCase(AppLogic.DEFAULT_MUNICIPAL_INVALID_ID))
{
AppLogic.getInstance().showPopup("יש לעדכן קוד רשות בפעם הראשונה במסך ההגדרות.", new GenericCallBack()
{
@Override
public void callBack(Object data)
{
AppLogic.getInstance().showSettings(LoginActivity.this);
}
});
}
}
private void populateAutoComplete()
{
getLoaderManager().initLoader(0, null, this);
}
/**
* Attempts to sign in or register the account specified by the login form.
* If there are form errors (invalid email, missing fields, etc.), the
* errors are presented and no actual login attempt is made.
*/
private void attemptLogin()
{
if (mAuthTask != null)
{
return;
}
// Reset errors.
mEmailView.setError(null);
mPasswordView.setError(null);
// Store values at the time of the login attempt.
String email = mEmailView.getText().toString();
String password = mPasswordView.getText().toString();
boolean cancel = false;
View focusView = null;
// Check for a valid password, if the user entered one.
if (!TextUtils.isEmpty(password) && !isPasswordValid(password))
{
mPasswordView.setError(getString(R.string.error_invalid_password));
focusView = mPasswordView;
cancel = true;
}
// Check for a valid email address.
if (TextUtils.isEmpty(email))
{
mEmailView.setError(getString(R.string.error_field_required));
focusView = mEmailView;
cancel = true;
}
else if (!isEmailValid(email))
{
mEmailView.setError(getString(R.string.error_invalid_email));
focusView = mEmailView;
cancel = true;
}
if (cancel)
{
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView.requestFocus();
}
else
{
// Show a progress spinner, and kick off a background task to
// perform the user login attempt.
showProgress(true);
mAuthTask = new UserLoginTask(email, password);
mAuthTask.execute((Void) null);
}
}
private boolean isEmailValid(String email)
{
return TextUtils.isDigitsOnly(email);
}
private boolean isPasswordValid(String password)
{
return password.length() >= 6;
}
/**
* Shows the progress UI and hides the login form.
*/
@TargetApi (Build.VERSION_CODES.HONEYCOMB_MR2)
private void showProgress(final boolean show)
{
if (show)
{
AppLogic.showProgressDialog(getString(R.string.wait_login));
}
else
{
AppLogic.hideProgressBar();
}
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle)
{
return new CursorLoader(this,
// Retrieve data rows for the device user's 'profile' contact.
Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,
// Select only email addresses.
ContactsContract.Contacts.Data.MIMETYPE +
" = ?", new String[]{ContactsContract.CommonDataKinds.Email
.CONTENT_ITEM_TYPE},
// Show primary email addresses first. Note that there won't be
// a primary email address if the user hasn't specified one.
ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor)
{
List<String> emails = new ArrayList<>();
cursor.moveToFirst();
while (!cursor.isAfterLast())
{
emails.add(cursor.getString(ProfileQuery.ADDRESS));
cursor.moveToNext();
}
addEmailsToAutoComplete(emails);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader)
{
}
private interface ProfileQuery
{
String[] PROJECTION = {
ContactsContract.CommonDataKinds.Email.ADDRESS,
ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
};
int ADDRESS = 0;
int IS_PRIMARY = 1;
}
private void addEmailsToAutoComplete(List<String> emailAddressCollection)
{
//Create adapter to tell the AutoCompleteTextView what to show in its dropdown list.
ArrayAdapter<String> adapter =
new ArrayAdapter<>(LoginActivity.this,
android.R.layout.simple_dropdown_item_1line, emailAddressCollection);
mEmailView.setAdapter(adapter);
}
/**
* Represents an asynchronous login/registration task used to authenticate
* the user.
*/
public class UserLoginTask extends AsyncTask<Void, Void, Boolean>
{
private final String mEmail;
private final String mPassword;
UserLoginTask(String email, String password)
{
mEmail = email;
mPassword = password;
}
@Override
protected Boolean doInBackground(Void... params)
{
// try {
// //Simulate network access.
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// return false;
// }
try
{
AppLogic.getInstance().doLogin(mEmail,mPassword,new NetworkCallBacks()
{
@Override
public void onResponse(Object response)
{
AppLogic.getInstance().showTasks(LoginActivity.this);
showProgress(false);
}
@Override
public void onErrorResponse(VolleyError error)
{
showProgress(false);
}
});
}
catch (Exception e)
{
return false;
}
return true;
}
@Override
protected void onPostExecute(final Boolean success)
{
mAuthTask = null;
// showProgress(false);
if (!success)
{
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
@Override
protected void onCancelled()
{
mAuthTask = null;
showProgress(false);
}
}
}
Re: Android
Добавлено: 05 авг 2015, 14:55
Mikhail_dev
После бездействия, можно записать системное время, которое будет говорить о начале бездействия и записать его SharedPreferences. Дальше поставить будильник(AlarmManager), чтобы он к примеру каждые 30 секунд залазил в SharedPreferences, доставал последнее время бездействия и сравнивал с текущим. если разница во времени более 15 минут, то вызываем logout. По AlarmManager есть урок -
http://startofandroid.com/ru/uroki/vse- ... nager.html