Форум программистов, компьютерный форум CyberForum.ru

При повторном запуске приложения не загружаются сохраненные значения SharedPreferences - Android

Восстановить пароль Регистрация
Другие темы раздела
Android Можно ли установить на таблет среду разработки? http://www.cyberforum.ru/android-dev/thread1353251.html
Всем С новым годом! У меня вопрос к тем, кто точно знает, можно ли создать мобильную апликацию при помощи таблетa( в часности, nexus 7). То есть можно ли установить на нем среду разработки( jdk, eclipse и т.п.). Заранее спасибо!
Android Fragment обработка нажатий Здравствуйте. Есть 9 Layout-ов. Каждый выступает в роли контейнера для фрагментов. Вопрос в следующем. Не могу сделать обработку нажатий на определённый layout, чтобы в нем появился фрагмент. Интересует сама обработка нажатия. Спасибо большое за помощь http://www.cyberforum.ru/android-dev/thread1353169.html
Android Studio ошибка с AVM manager Android
Ахой! Такой вопрос - при создании виртуального устройства с помощью AVM manager возникает ошибка "неожиданное заверение программы Studio..передать ошибку Apple бла бла бла"... Аппарат Macbook late 2007..на одном пиндосовском форуме вычитал, что возможно как то напрямую запустить AVM manager без Android Studio. Есть идеи?
Статистика Google Analytics по приложению Android Android
Не могу понять, каким образом google analytics показывает "Количество активных устройств, на которых установлено приложение". Выяснил, что размещенное на Google Play приложение (и связанное с аккаунтом Google Analytics) не будет выдавать статистику, пока в само приложение не будут внесены для этого изменения. Добавил libGoogleAnalyticsServices.jar и с помощью EasyTracker попробовал писать...
Android Drawable and screen resolution http://www.cyberforum.ru/android-dev/thread1352656.html
Много прочитал всего по данному вопросу, но непонятности все таки меня не оставили. Собственно вопрос: Имею картинку для фона и хочу что бы она отображалась на экранах с разными разрешениями. Первый вариант как это сделать - это создать копии этой картинки с разными разрешениями и раскидать их по папкам drawable-hdpi-ldpi... В принципе самый оптимальный, как я понял, вариант. Но если у...
Android Как организовать взаимодействие с интерфейсом без участия пользователя? Здравствуйте! Начинающий джавист просит помощи! Пишу шашки под андроид. Столкнулся с проблемой при продумывании архитектуры игры человек vs компьютер. Как известно, пользователь взаимодействует с программой через интерфейс. Для элементов интерфейса назначаются слушатели, внутри которых перегружаются методы, отвечающие за то или иное событие. Когда ходит человек, то как раз-таки все нужные... подробнее

Показать сообщение отдельно
vladbim
0 / 0 / 0
Регистрация: 14.01.2015
Сообщений: 4
14.01.2015, 15:11     При повторном запуске приложения не загружаются сохраненные значения SharedPreferences
Всем привет. сразу пишу, что андроид начал изучать недавно. В общем, в программке надо реализовать сохранение введенного или выбранного из контактов номера телефона. При первом запуске пользователь указывает номер. При последующих, вызывается другой активити SecondActivity. Вот код MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
public class MainActivity extends ActionBarActivity {
 
    private static final int CONTACT_PICK_RESULT = 666;
    private static final String LOG_TAG = "my_tag";
    private TextView mNumber;
    public static final String app_preferences="settings";
    public static final String Tel_Number = "Telephone";
    public static final String Contact_Name = "Contact Name";
    private static SharedPreferences mSettings;
    private String mContactId;
    private String mPhoneNumber;
    private String mContactName;
    private Intent intent = new Intent();
 
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSettings = getSharedPreferences(app_preferences, Context.MODE_PRIVATE);
    }
 
@Override
    protected void onPause() {
        super.onPause();
 
        SharedPreferences.Editor editor = mSettings.edit();
        editor.putString(Tel_Number,mPhoneNumber);
//        editor.putString(Contact_Name,mContactName);
        editor.apply();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
 
        if(mSettings.contains(Tel_Number)) {
            Toast.makeText(this, mSettings.getString(Tel_Number, ""),Toast.LENGTH_LONG).show();
            intent.setClass(this, SecondActivity.class);
            startActivity(intent);
        }
        else {
            setContentView(R.layout.activity_main);
        }
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        onPause();
    }
 
    public static boolean checkNum(String num)  {
 
        if(  num.length() >10 ||  num.length() <9)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
 
    public void onClick(View view) {
        mNumber=(TextView)findViewById(R.id.editText1);
        mPhoneNumber=mNumber.getText().toString().trim();
        try {
 
            if(checkNum(mPhoneNumber))
            {
                mPhoneNumber = "38"+mNumber.getText().toString();
                onPause();
                onResume();
 
            }
            else
            {
                throw new Exception("Неправильно указан номер телефона");
            }
 
        }
        catch (Exception e)
        {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
 
    public void  pickPhone(View view) {
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(contactPickerIntent, CONTACT_PICK_RESULT);
    }
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case CONTACT_PICK_RESULT:
                    Uri contactData = data.getData();
                    Cursor c =  getContentResolver().query(contactData, null, null, null, null);
                    if (c.moveToNext()) {
                        mContactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                        mContactName = c.getString(c.getColumnIndexOrThrow(
                                ContactsContract.Contacts.DISPLAY_NAME));
 
                        String hasPhone = c.getString(c.getColumnIndex(
                                ContactsContract.Contacts.HAS_PHONE_NUMBER));
 
                        Log.d(LOG_TAG, "name: " + mContactName);
                        Log.d(LOG_TAG, "hasPhone:" + hasPhone);
                        Log.d(LOG_TAG, "contactId:" + mContactId);
 
                        // если есть телефоны, получаем и выводим их
                        if (hasPhone.equalsIgnoreCase("1")) {
                            Cursor phones = getContentResolver().query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ mContactId,
                                    null,
                                    null);
 
                            while (phones.moveToNext()) {
                                mPhoneNumber = phones.getString(phones.getColumnIndex(
                                        ContactsContract.CommonDataKinds.Phone.NUMBER));
                                Log.d(LOG_TAG, "телефон:" + mPhoneNumber);
                            }
                            phones.close();
                        }
 
                    }
                    break;
            }
            onPause();
            onResume();
        } else {
            Log.d(LOG_TAG, "ERROR");
            Toast.makeText(this, "Ошибка", Toast.LENGTH_LONG).show();
        }
    }
}
Вот SecondActivity, от сюда от может войти в настройки и изменить номер.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class SecondActivity extends ActionBarActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        Intent intent = new Intent();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            intent.setClass(this, PrefActivity.class);
            startActivity(intent);
            return true;
        }
 
        return super.onOptionsItemSelected(item);
 
    }
 
}
И тут начинается самое интересное.
Если мы прогу запускаем первый раз, то только что указанный номер(в мейнактивити) без проблем отображается в настройках.
Если же закрыть программу, и открыть второй раз, то он в настройках уже не отображается. Но в файле настроек он есть, так как прога проверяет при открытии,его наличие в методе onResume() класса MainActivity и выводит в Тост.
Если же закрыть прогу и еще раз открыть, то номер не отображается даже в тосте((
В чем может быть дело?
Вот код Настроек PrefActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public  class PrefActivity extends PreferenceActivity implements Preference.OnPreferenceChangeListener {
    private static  SharedPreferences Sett;
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferenceScreen rootScreen = getPreferenceManager().createPreferenceScreen(this);
        setPreferenceScreen(rootScreen);
        Sett= getSharedPreferences(MainActivity.app_preferences, Context.MODE_PRIVATE);
 
        EditTextPreference etp = new EditTextPreference(this);
        etp.setKey("Телефон");
        etp.setTitle("Изменить номер телефона");
        etp.setSummary(getNum());
        etp.setOnPreferenceChangeListener(this);
        rootScreen.addPreference(etp);
    }
 
    private String getNum()
    {
        if(Sett.contains(MainActivity.Tel_Number)) {
         return   Sett.getString(MainActivity.Tel_Number, "");
        }
        else
        return "Error";
    }
 
    public boolean onPreferenceChange(Preference preference, Object newValue)
    {
        try {
            if (MainActivity.checkNum(newValue.toString())) {
 
                preference.setSummary(newValue.toString());
                SharedPreferences.Editor editor = Sett.edit();
                editor.putString(MainActivity.Tel_Number, newValue.toString());
                editor.apply();
            }
            else
            {
                throw new Exception("Неправильно указан номер телефона");
            }
 
        }
        catch (Exception e)
        {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
        return true;
    }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru