Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 27

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

12.03.2015, 14:45. Показов 570. Ответов 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.

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

Нужна срочная помощь !!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.03.2015, 14:45
Ответы с готовыми решениями:

Учёные насчитали 295 экзабайт сохранённой информации в мире
Учёные подсчитали количество информации, хранимой в настоящее время человечеством. Согласно результатам исследования, опубликованным в...

Добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в типизированный файл.
Помогите добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в...

Загрузка информации с сайта
Вот хочу спросить, никто не писал программу-парсер для myscore? Там такая проблема, в коде нет таблицы, которая в центре. Как я понял,...

2
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
12.03.2015, 15:03
FeonoR, храните в Application
0
11 / 0 / 0
Регистрация: 22.03.2012
Сообщений: 27
13.03.2015, 08:07  [ТС]
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();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.03.2015, 08:07
Помогаю со студенческими работами здесь

Загрузка информации на компьютер
Задали написать доклад на тему &quot;Поиск информации в Web и ее загрузка на компьютер пользователя &quot; Про все написал,кроме загрузки на...

Загрузка информации из файла
Добрый день! Помогите, пожалуйста. На сайте есть раскрывающееся меню со списком автомобилей. Информация о каждом автомобиле хранится в...

Загрузка информации с сайта
Доброго дня. не могу загрузить на лист excel информацию с сайта http://www.sberbank-ast.ru/SupplierList.aspx Sub Загрузка() ...

Загрузка информации о файлах в ListView
Привет! на форме есть компонент ListView (vsReport) кнопка Button и OpenDialog...как программно загрузить файлы из определенного источника...

Загрузка файла и информации о нем
Нажимаю кнопку загрузки файла, а создается запись и файл не загружается. Как это исправить? Нужно загружать на сайт книги и информацию о...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru