Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 98
#1

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

14.12.2016, 21:38. Просмотров 578. Ответов 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
Кликните здесь для просмотра всего текста
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
Суть проблемы: запускаю приложение на эмуляторе под разрешение показанное на скрине, все отлично работает. Меняю разрешение на более...

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

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

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

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

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

30
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
15.12.2016, 10:15 #2
geometria, где ошибка?
0
geometria
1 / 1 / 0
Регистрация: 13.01.2013
Сообщений: 98
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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
15.12.2016, 12:09 #6
pompiduskus, откуда уверенность)?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
15.12.2016, 12:16 #9
pompiduskus, при чтении он должен иметь значение которое будет подставлено если прочитать параметр не удалось. практика.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 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
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
15.12.2016, 12:24 #12
Цитата Сообщение от pompiduskus Посмотреть сообщение
Если есть что сказать по делу, прошу,
читать не умеешь? я наводящий вопрос задал выше
0
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
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
15.12.2016, 13:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2016, 13:41
Привет! Вот еще темы с ответами:

В приложении произошла ошибка - Программирование Android
Всем привет начал изучать андроид программирования и вот хотел сделать пост запрос на сервер и получить ответ все ОК . На девайсе работает...

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

SurfaceView при изменении ориентации экрана перегружается - Программирование Android
при создании тетриса возник вопрос. один из моих классов расширяет класс SurfaceView public class TetrisView extends SurfaceView ...

Вылетает Hello World! - в приложении произошла ошибка - Программирование Android
Здравствуйте. По непонятным причинам слетел Eclipse, при этом в буквальном смысле слова &quot;почистив&quot; все xml документы в моих проектах, тем...


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

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

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