Страница 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