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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
FeonoR
11 / 0 / 1
Регистрация: 22.03.2012
Сообщений: 27
#1

Загрузка сохраненной информации - Android

12.03.2015, 14:45. Просмотров 234. Ответов 2
Метки нет (Все метки)

Доброго времени суток.

Подскажите пожалуйста, как можно организовать единоразовую загрузку ранее сохраненной информаци в SharedPreferences.
Под единоразовой понимается, что она будет происходить только при запуске приложения (не при первом, а при каждом), и не будет просходить, если пользователь бродит из активити, в активити.

Вариант типа:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SharedPreferences prefs = null;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Perhaps set content view here
 
prefs = getSharedPreferences("com.mycompany.myAppName", MODE_PRIVATE);
}
 
@Override
protected void onResume() {
super.onResume();
 
if (prefs.getBoolean("firstrun", true)) {
// Do first run stuff here then set 'firstrun' as false
// using the following line to edit/commit prefs
prefs.edit().putBoolean("firstrun", false).commit();
}
}
Не подходит, т.к. тут как раз только при первом запуске приложения.

Вариант:
Java
1
2
3
4
5
6
7
8
9
10
// Приложение запущено впервые или восстановлено из памяти? 
if ( savedInstanceState == null )   // приложение запущено впервые 
{ 
   загружаем 
   обновляем 
}  
else // приложение восстановлено из памяти 
{ 
    ничего не делаем 
}
Не работает, тк даже если срабатывает метод onSaveInstanceState(), то потом при вызове onCreate savedInstanceState - все равно будет null.

Почему важно загружать только при запуске - потому что приложение в основе своей имеет работу с интернетом(отправка/прием информации) и если постоянно будет загрузка, которая сопровождается обновлением - то это очень печально.

Нужна срочная помощь !!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2015, 14:45     Загрузка сохраненной информации
Посмотрите здесь:

Получение информации о состоянии приложения Android
Android Получение информации об устройстве
Загрузка 3D модели Android
Android Парсинг информации с сайта
Android Хранение очень секретной информации
Android Загрузка изображения
Добавление элемента и запись в него информации Android
Android Get запрос с выводом полученной информации на экран
Подгрузка еще информации из базы MYSQL Android
Виджет детальной информации в андроид Android
Вывод информации в Toast c Адаптера Android
Сохранение в блокноте зашифрованной информации Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
12.03.2015, 15:03     Загрузка сохраненной информации #2
FeonoR, храните в Application
FeonoR
11 / 0 / 1
Регистрация: 22.03.2012
Сообщений: 27
13.03.2015, 08:07  [ТС]     Загрузка сохраненной информации #3
YuraAAA, можно как-то точнее?
Создавать свой класс и наследоваться от Application ?
То есть засунуть туда свой ArrayList<мойтип> - загрузить в него данные, потом там же создать экземпляр asynctask - выполнить обновление и потом уже после этого запустится основная активити - так ?

Добавлено через 1 час 17 минут
YuraAAA, а потом я так понимаю нужно в onCreate() основной активити вызвать так:
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
public class App extends Application {
 
    private static App singleton;
 
    public static App getInstance(){
        return singleton;
    }
 
    @Override
    public final void onCreate(){
        super.onCreate();
        singleton = this;
    }
}
 
class Main extends Activity {
 
  @Override
  public void onCreate(Bundle b){
    ...
    App mApplication = (App)getApplicationContext();
//а дальше что-то в духе 
string s = mApplication.getUsername();
    ...
  }
}
Если да - то какова вероятность, что при вызове активити опять данные не будут подгружаться ?

Добавлено через 1 час 0 минут
Что-то видимо я делаю не так.... код следующий:

App.java
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
/*
 * Copyright (c) 2015. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
 * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
 * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
 * Vestibulum commodo. Ut rhoncus gravida arcu.
 */
 
package com.link.tes;
 
import android.app.Application;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.util.Log;
 
import java.util.ArrayList;
 
/**
 * Created by Dual on 13.03.15.
 */
public class App extends Application {
 
    private static App singleton;
    public static ArrayList<universal> Data = new ArrayList<>();
    private static ArrayList<universal> temp = new ArrayList<>();
    private SharedPreferences UniDat;
    private universal member;
 
    public static App getInstance(){
        return singleton;
    }
 
    @Override
    public final void onCreate(){
        super.onCreate();
        singleton = this;
        LoadData();
        UpdData();
    }
 
    public ArrayList getData(){
        return Data;
    }
 
    private void LoadData(){
        int i = 0;
        String l;
        String p;
        String o;
        UniDat = getSharedPreferences("UniData", MODE_PRIVATE);
        int n = UniDat.getInt("UniSize",0);
        Log.i("load unisize", Integer.toString(UniDat.getInt("UniSize", 0)));
        while (i < n){
            l = UniDat.getString("UniItem log " + i,"");
//            Log.i("load", UniData.getString("UniItem log " + i,""));
            p = UniDat.getString("UniItem pass " + i, "");
//            Log.i("load", UniData.getString("UniItem pass " + i,""));
            o = UniDat.getString("UniItem oper " + i, "");
//            Log.i("load", UniData.getString("UniItem oper " + i,""));
            member = new universal(l, p, o);
            Data.add(member);
            i++;
        }
        Log.i("load", "Load ok");
    }
 
    private void UpdData(){
        if(Data.size() != 0)
        {
            int a_error;
            int i = 0;
            temp.addAll(Data);
            Data.clear();
            while (i < temp.size())
            {
                Task Upd = new Task();
                Upd.execute(temp.get(i).log, temp.get(i).pass, temp.get(i).oper);
                Log.i("upd","user "+i);
                i++;
            }
            temp.clear();
        }
        Log.i("upd", "Update ok");
    }
 
    class Task extends AsyncTask<String, Void, String> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
        @Override
        protected String doInBackground(String... params) {
 
            String s ;
            s = uni(params[0],params[1],params[2]);
            return s;
        }
 
        String uni(String l, String p, String o) {
 
            member = new universal(l,p,o);
            Log.i("oky", "beforeauth");
            if (member.Auth(member.log,member.pass) == 0){
                Log.i("oky", "inauth");
                member.GetInfo();
                member.Parse();
                Data.add(member);
                return member.f_info;
            }
 
//            return  "";
            else return member.error;
        }
 
 
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
        }
    }
 
 
}
Данные загружаются корректно, а вот обновление не происходит.
Как можно заставить работать класс Task работать ?? (((

Добавлено через 8 минут
Забыл написать - вызываю так:
И вызываю так:
Java
1
2
3
App mApp = (App)getApplicationContext();
        uniItems.addAll(mApp.getData());
        Log.i("size",Integer.toString(uniItems.size()));
Добавлено через 14 часов 32 минуты
В общем за не имением опыта и другого решения - пришлось сделать как описано выше, заменив просто execute на execute.get();
Yandex
Объявления
13.03.2015, 08:07     Загрузка сохраненной информации
Ответ Создать тему
Опции темы

Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru