Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
geometria
1 / 1 / 6
Регистрация: 13.01.2013
Сообщений: 107
#1

При изменении настройки в приложении выскакивает ошибка - Программирование Android

14.12.2016, 21:38. Просмотров 666. Ответов 30
Метки нет (Все метки)

Java
1
2
3
4
5
6
private SharedPreferences prefs;
        public void prefMethod()
        {
               this.mSettings = Integer.parseInt(prefs.getString("preference_radius",
"25"));
    }
Как правильно оформить этот метод?


Painting.java
http://www.cyberforum.ru/android-dev/thread2213161.html
Кликните здесь для просмотра всего текста
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com.livewallpaper;
 
import android.content.*;
import android.graphics.*;
import android.view.*;
import java.util.*;
 
public class LiveWallpaperPainting extends Thread implements Runnable{
        
        private SurfaceHolder surfaceHolder;
        private static final int MAX_COUNT = 17;
        int mSettings;
        Bitmap foni;
        Bitmap pic;
        Timer timer;
        int count;
        private boolean wait;
        private boolean run;
        private Paint mScorePaint;
        public LiveWallpaperPainting(SurfaceHolder surfaceHolder, final Context context, int radius) {
                this.surfaceHolder = surfaceHolder;
                this.wait = true;
                pic = BitmapFactory.decodeResource(context.getResources(), R.drawable.p01);
                mSettings=radius;
                
                
                mScorePaint = new Paint();
                mScorePaint.setTextSize(30);
                mScorePaint.setStrokeWidth(2);
                mScorePaint.setColor(Color.WHITE);
                
                foni = BitmapFactory.decodeResource(context.getResources(), R.drawable.fon2);
                timer = new Timer(); 
                timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    if(count == MAX_COUNT ) count = 0;
                pic = BitmapFactory.decodeResource(context.getResources(), R.drawable.p01 + count);
                count++;
                          }
 
    }, 0,80);
 
        
        }   
        
    private SharedPreferences prefs;
        public void prefMethod()
        {
               this.mSettings = Integer.parseInt(prefs.getString("preference_radius",
"25"));
 
            //this.mSettings = Integer.parseInt("10");
    }
        public void pausePainting() {
                this.wait = true;
                synchronized(this) {
                        this.notify();
                }}
        public void resumePainting() {
                this.wait = false;
                synchronized(this) {
                        this.notify();
                } }
        public void stopPainting() {
                this.run = false;
                synchronized(this) {
                        this.notify();
                }}
        @Override
        public void run() {
            
                this.run = true;
                Canvas c = null;
                while (run) {
                        try {
                                c = this.surfaceHolder.lockCanvas(null);
                                synchronized (this.surfaceHolder) {
                                        Thread.sleep(50);
                                        doDraw(c);
                                }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        } finally {
                                if (c != null) {
                                        this.surfaceHolder.unlockCanvasAndPost(c);
                                }
                        }
                        synchronized (this) {
                                if (wait) {
                                        try {
                                                wait();
                                        } catch (Exception e) {}
                                }
                        }
                }
        }
        int w; int h;
        int wp; int hp;
        int wpV; int wpH;
        int ws; int hs;
        public void setSurfaceSize(int width, int height) {
             this.w = width;
             this.h = height;
             this.wp = foni.getWidth();
             this.hp = foni.getHeight();
             this.wpV = wp*11/10;
             this.wpH = w*11/10;
             this.ws = h*3/5;
             this.hs = h*3/5;
                    synchronized(this) {
                     this.notify();
             }
     }
       float t = 0;
       float t2 = 0;
       int T = -1;
       int A = -1;
         public boolean doTouchEvent(MotionEvent event) {
             switch (event.getAction()){
             case MotionEvent.ACTION_DOWN:
                 t = event.getX();
             case MotionEvent.ACTION_MOVE:
             t2 = event.getX();
             if (t < t2 & w < h & T < 0){//пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ
                     T++;}
             if (t < t2 & w > h & A < 0){//пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ
                 A++;}
             if (t > t2 & w > h & A*3 > w-wpH){//пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ
                     A--;}
             if (t > t2 & w < h & T*7 > w-wpV){//пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ
                 T--;}
             }
            return true;
      }
         
         private void doDraw(Canvas canvas) {
             
                canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                //canvas.drawColor(Color.WHITE);
               int prefs = mSettings;
                if (w < h){
                    Bitmap fon = Bitmap.createScaledBitmap(foni, wpV, h, false);
                    canvas.drawBitmap(fon, T*7, 0, null);// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ    пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ
                    Bitmap bmHalf = Bitmap.createScaledBitmap(pic, ws, hs, false);
                    canvas.drawBitmap(bmHalf, T*7+w/2, h-hs, null); 
                    canvas.drawText("пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ - " + prefs, 50, 70, mScorePaint);
                    }
                if (w > h) {
                    Bitmap fon = Bitmap.createScaledBitmap(foni, wpH, h, false);
                    canvas.drawBitmap(fon, A*3, 0, null);// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ    пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ
                    Bitmap bmHalf2 = Bitmap.createScaledBitmap(pic, ws, hs, false);
                    canvas.drawBitmap(bmHalf2, A*3+w/3, h/2, null);
                    canvas.drawText("пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ - " + prefs, 50, 70, mScorePaint);}
                
                
                }
        
}

Service.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
package com.livewallpaper;
 
import android.content.Context;
import android.content.SharedPreferences;
import android.service.wallpaper.WallpaperService;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
 
public class LiveWallpaperService extends WallpaperService {
 
    public static final String APP_PREFERENCES = "mysettings";
    public static final String APP_PREFERENCE_RADIUS = "preference_radius";
    
    
    @Override
    public Engine onCreateEngine() {
                   return new SampleEngine();
    }
 
    @Override
    public void onCreate() {
            super.onCreate();
    }
 
    @Override
    public void onDestroy() {
            super.onDestroy();
    }
 
    public class SampleEngine extends Engine implements SharedPreferences.OnSharedPreferenceChangeListener {
 
            
            private LiveWallpaperPainting painting;
            private SharedPreferences prefs;
            SharedPreferences mSettings;
            
            SampleEngine() {
                    SurfaceHolder holder = getSurfaceHolder();
                    prefs = LiveWallpaperService.this.getSharedPreferences(APP_PREFERENCES, 0);
                    prefs.registerOnSharedPreferenceChangeListener(this);
                    painting = new LiveWallpaperPainting(holder, getApplicationContext(), 
                                Integer.parseInt(prefs.getString(APP_PREFERENCE_RADIUS, "10")));
                    
                    
                                        
            }
 
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
painting.prefMethod();
    //mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
                //    super.onCreate(surfaceHolder);
                  
                                            }
 
 
 
 @Override
            public void onCreate(SurfaceHolder surfaceHolder) {
                mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
                    super.onCreate(surfaceHolder);
                    setTouchEventsEnabled(true);
            }
 
            @Override
            public void onDestroy() {
                    super.onDestroy();
                    // remove listeners and callbacks here
                    painting.stopPainting();
            }
 
            @Override
            public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                    super.onSurfaceChanged(holder, format, width, height);
                    painting.setSurfaceSize(width, height);
            }
 
            @Override
            public void onSurfaceCreated(SurfaceHolder holder) {
                    super.onSurfaceCreated(holder);
                    painting.start();
                    
            }
 
 
            @Override
            public void onVisibilityChanged(boolean visible) {
                    if (visible) {
                            painting.resumePainting();
                    } else {
                            // remove listeners and callbacks here
                            painting.pausePainting();
                    }
            }
            
            @Override
            public void onSurfaceDestroyed(SurfaceHolder holder) {
                    super.onSurfaceDestroyed(holder);
                    boolean retry = true;
                    painting.stopPainting();
                    while (retry) {
                            try {
                                    painting.join();
                                    retry = false;
                            } catch (InterruptedException e) {}
                    }
            }
 
 
            @Override
            public void onTouchEvent(MotionEvent event) {
                    super.onTouchEvent(event);
                    painting.doTouchEvent(event);
            }
            
    }
    
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2016, 21:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос При изменении настройки в приложении выскакивает ошибка (Программирование Android):

Ошибка приложения, при изменении эмулятора
Суть проблемы: запускаю приложение на эмуляторе под разрешение показанное на...

"В приложении произошла ошибка" при нажатии на кнопку перехода на какую-либо активность
Нужно было несколько функций в одно приложение соединить..Отдельно каждая из...

При запуске приложения на Android оно крашится и вылетает с ошибкой "В приложении %название% произошла ошибка"
Как посмотреть логи ошибки? Игра просто была установлена, она не...

Почему после выхода из приложения выскакивает ошибка?
Я начал писать программу для андроид (плеер) Скомпилировал, установил на свое...

Когда жму Назад выскакивает ошибка Unfortunately <my app> has stopped
Здравствуйте! Пишу игру под андроид. Все работает хорошо за исключением одного...

30
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 10:15 #2
geometria, где ошибка?
0
geometria
1 / 1 / 6
Регистрация: 13.01.2013
Сообщений: 107
15.12.2016, 11:40  [ТС] #3
вылетает приложение при смене настроек, если строчку
Java
1
2
this.mSettings = Integer.parseInt(prefs.getString("preference_radius",
"25"));
поменять на
Java
1
this.mSettings = Integer.parseInt("25");
ошибка не выскакивает
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 11:55 #4
geometria, где ошибка - 2? где лог или сообщение отладчика? уж не null ли в prefs? что то нигде не видно как он образуется...
0
pompiduskus
1 / 1 / 0
Регистрация: 07.03.2012
Сообщений: 15
15.12.2016, 12:06 #5
Вот так будет работать!

Java
1
this.mSettings = Integer.parseInt( prefs.getString("preference_radius", "") );
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 12:09 #6
pompiduskus, откуда уверенность)?
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,434
Завершенные тесты: 1
15.12.2016, 12:11 #7
Цитата Сообщение от geometria Посмотреть сообщение
ылетает приложение при смене настроек, если строчку
вылетает наверняка потому что в настройки записано НЕ число и при парсинге все падает

Цитата Сообщение от pompiduskus Посмотреть сообщение
Вот так будет работать!
не будет, почему? подумай сам
0
pompiduskus
1 / 1 / 0
Регистрация: 07.03.2012
Сообщений: 15
15.12.2016, 12:14 #8
Связано это с тем что Prefs объек хочет второй параметр. Но при чтении он должен быть пустым.
Кому интересно вникать в детали, все это описанно на android/dev


vxg "pompiduskus, откуда уверенность)?"

Практика.
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 12:16 #9
pompiduskus, при чтении он должен иметь значение которое будет подставлено если прочитать параметр не удалось. практика.
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,434
Завершенные тесты: 1
15.12.2016, 12:17 #10
Цитата Сообщение от pompiduskus Посмотреть сообщение
Но при чтении он должен быть пустым.
и если он будет пустой что произойдет?
Цитата Сообщение от pompiduskus Посмотреть сообщение
Практика
ты очередной теоретик, который перед тем как писать ничего не проверяет, остановись и не давай больше глупые советы людям
0
pompiduskus
1 / 1 / 0
Регистрация: 07.03.2012
Сообщений: 15
15.12.2016, 12:23 #11
Я у себя из рабочего года взял строку. В чем проблема ?

Если есть что сказать по делу, прошу, жду ваших изложений, а мутить воду вилами я тоже умею!
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,434
Завершенные тесты: 1
15.12.2016, 12:24 #12
Цитата Сообщение от pompiduskus Посмотреть сообщение
Если есть что сказать по делу, прошу,
читать не умеешь? я наводящий вопрос задал выше
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 12:34 #13
Цитата Сообщение от pompiduskus Посмотреть сообщение
Если есть что сказать по делу, прошу, жду ваших изложений, а мутить воду вилами я тоже умею!
сравните
Цитата Сообщение от pompiduskus Посмотреть сообщение
Связано это с тем что Prefs объек хочет второй параметр. Но при чтении он должен быть пустым.
с
String getString (String key, String defValue)
Retrieve a String value from the preferences.

Parameters
key String: The name of the preference to retrieve.
defValue String: Value to return if this preference does not exist.

Returns
String Returns the preference value if it exists, or defValue. Throws ClassCastException if there is a preference with this name that is not a String.
читать тут https://developer.android.com/refere...a.lang.String)
0
pompiduskus
1 / 1 / 0
Регистрация: 07.03.2012
Сообщений: 15
15.12.2016, 13:25 #14
Вы отсылаете меня туда, куда я вас отсылала

Ладно давайте так!

Значит этот код не верный ? Вы подтверждаете это, или нет ?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public synchronized Twitter getTwitter() { // <5> 
    if (this.twitter == null) {
      String username = this.prefs.getString("username", "");
      String password = this.prefs.getString("password", "");
      String apiRoot = prefs.getString("apiRoot", "http://api.com/api"); 
      if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)
          && !TextUtils.isEmpty(apiRoot)) {
        this.twitter = new Twitter(username, password);
        this.twitter.setAPIRootUrl(apiRoot);
      } 
    } 
    return this.twitter;
  }
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 13:41 #15
pompiduskus, я абсолютно точно подтверждаю что код ТС
Java
1
2
this.mSettings = Integer.parseInt(prefs.getString("preference_radius",
"25"));
- технически верный - ошибка скорее всего в том что либо prefs не инициализирован либо preference_radius хранит не число, ваш код
Java
1
this.mSettings = Integer.parseInt( prefs.getString("preference_radius", "") );
- будет падать всегда когда нет сохраненных данных и никак не поможет ТС, ваше утверждение
Цитата Сообщение от pompiduskus Посмотреть сообщение
Связано это с тем что Prefs объек хочет второй параметр. Но при чтении он должен быть пустым.
- ложно, ваши амбиции - непомерны. постарайтесь не торопиться с ответом если не до конца понимаете что пишите
0
geometria
1 / 1 / 6
Регистрация: 13.01.2013
Сообщений: 107
15.12.2016, 14:04  [ТС] #16
вылетает с той же ошибкой.
подскажите, где префс прописать?
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 14:10 #17
geometria, к примеру в onCreate написать
Java
1
prefs=getSharedPreferences("settings", MODE_PRIVATE);
Добавлено через 1 минуту
...ну или (APP_PREFERENCES, 0) как у вас судя по всему в другой части делается
0
fraley
110 / 110 / 43
Регистрация: 24.05.2015
Сообщений: 329
15.12.2016, 14:20 #18
1)ТС, где код ошибки?
2)TC, в код не вникал, но в классе Painting вы используете SharedPreferences не инициализировав их?
3)
Цитата Сообщение от pompiduskus Посмотреть сообщение
Я у себя из рабочего года взял строку. В чем проблема ?
Проблема в том что, как выше уже указали это не будет работать.
0
geometria
1 / 1 / 6
Регистрация: 13.01.2013
Сообщений: 107
15.12.2016, 14:28  [ТС] #19
ошибка не вылетает.
но теперь настройки не сохраняются
0
vxg
Модератор
3229 / 2032 / 319
Регистрация: 13.01.2012
Сообщений: 7,884
15.12.2016, 14:30 #20
Лучший ответ Сообщение было отмечено geometria как решение

Решение

geometria, они не сохраняются потому что в вашем коде нет ни одной строчки которая бы их сохраняла - чему вы удивляетесь?
1
15.12.2016, 14:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2016, 14:30
Привет! Вот еще темы с решениями:

Что за пароль выскакивает при загрузке эмулятора
Ничего не понимаю, эмулятор загружается и запрашивает какой-то пароль. Люди...

Почему выскакивает уведомление при попытке запустить apk ?
Добрый день, открываю APK файл для установки его на android с помощью данного...

В приложении произошла ошибка
Всем привет начал изучать андроид программирования и вот хотел сделать пост...

При изменении шрифта на собственный вылетает приложение
Вылетает как только открываю Activity, которому принадлежит данный TextView....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru