Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Первое приложение

Здравствуйте. Господа, расскажите у кого какое было первое приложение. Первое приложение которое вы кропотливо писали (лично для себя или для заказчика).
Ответ:

Не по теме:

Сообщение от Vladimirys
Лень, умножить на обжортис.
Представляю, какие там рыла были в отзывах

Вопрос: Просьба обсудить первое приложение Android

Прошу не судить строго, это мое первое приложение. Написал калькулятор,если очень плохо написано, попрошу внести предложения, Ваши коментарии по сокращению или улучшению кода.Проблема в том что, если результат целое число то должно выводить тип int, а выводит всеравно float;


Java(TM) 2 Platform Standard Edition 5.0
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
package com.example.leon.calculat;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;
import java.util.LinkedList;
public class MainActivity extends Activity implements OnClickListener {
    EditText etNum;
    Button btnOne,btnTwo,btnThree,btnFour ,btnFive,btnSix,btnSeven, btnEight, btnNine, btnZero;
    Button btnAdd, btnDiv, btnMul, btnSub, btnAnswer,btnClin,btn_back,btn_l_bracket,btn_r_bracket;
    Button btn_dot;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // находим элементы
        etNum = (EditText)findViewById(R.id.etNum);
        btnOne = (Button)findViewById(R.id.btnOne);
        btnTwo = (Button)findViewById(R.id.btnTwo);
        btnThree = (Button)findViewById(R.id.btnThree);
        btnFour = (Button)findViewById(R.id.btnFour);
        btnFive = (Button)findViewById(R.id.btnFive);
        btnSix = (Button)findViewById(R.id.btnSix);
        btnSeven = (Button)findViewById(R.id.btnSeven);
        btnEight = (Button)findViewById(R.id.btnEight);
        btnNine = (Button)findViewById(R.id.btnNine);
        btnZero = (Button)findViewById(R.id.btnZero);
        btnAdd = (Button)findViewById(R.id.btnAdd);
        btnDiv = (Button)findViewById(R.id.btnDiv);
        btnMul = (Button)findViewById(R.id.btnMul);
        btnSub = (Button)findViewById(R.id.btnSub);
        btnAnswer = (Button)findViewById(R.id.btnAnswer);
        btnClin = (Button)findViewById(R.id.btnClin);
        btn_back = (Button)findViewById(R.id.btn_back);
        btn_l_bracket = (Button)findViewById(R.id.btn_l_bracket);
        btn_r_bracket = (Button)findViewById(R.id.btn_r_bracket);
        btn_dot = (Button)findViewById(R.id.btn_dot);
        //прописываем обработчик
        btnOne.setOnClickListener(this);
        btnTwo.setOnClickListener(this);
        btnThree.setOnClickListener(this);
        btnFour.setOnClickListener(this);
        btnFive.setOnClickListener(this);
        btnSix.setOnClickListener(this);
        btnSeven.setOnClickListener(this);
        btnEight.setOnClickListener(this);
        btnNine.setOnClickListener(this);
        btnZero.setOnClickListener(this);
        btnAdd.setOnClickListener(this);
        btnDiv.setOnClickListener(this);
        btnMul.setOnClickListener(this);
        btnSub.setOnClickListener(this);
        btnAnswer.setOnClickListener(this);
        btnClin.setOnClickListener(this);
        btn_back.setOnClickListener(this);
        btn_l_bracket.setOnClickListener(this);
        btn_r_bracket.setOnClickListener(this);
        btn_dot.setOnClickListener(this);
    }
 
 
public void onClick(View v) {
    Editable str =  etNum.getText();
    switch (v.getId()){
        // определяем нажатую кнопку и выполняем соответствующую операцию
        case R.id.btnOne: str= str.append(btnOne.getText());
            etNum.setText(str);break;
        case R.id.btnTwo: str =str.append(btnTwo.getText());
            etNum.setText(str); break;
        case R.id.btnThree: str = str.append(btnThree.getText());
            etNum.setText(str); break;
        case R.id.btnFour: str.append(btnFour.getText());
            etNum.setText(str);break;
        case R.id.btnFive: str = str.append(btnFive.getText());
            etNum.setText(str);break;
        case R.id.btnSix: str = str.append(btnSix.getText());
            etNum.setText(str);break;
        case R.id.btnSeven: str = str.append(btnSeven.getText());
            etNum.setText(str);break;
        case R.id.btnEight:str = str.append(btnEight.getText());
            etNum.setText(str);break;
        case R.id.btnNine: str = str.append(btnNine.getText());
            etNum.setText(str);break;
        case R.id.btnZero: str = str.append(btnZero.getText());
            etNum.setText(str);break;
        case R.id.btn_l_bracket: str.append(btn_l_bracket.getText());
            etNum.setText(str);break;
        case R.id.btn_r_bracket: str.append(btn_r_bracket.getText());
            etNum.setText(str);break;
        case R.id.btn_dot: str.append(btn_dot.getText());
            etNum.setText(str);break;
        case R.id. btn_back:
           StringBuilder bac = new StringBuilder(str);
            int lastback=str.length();
           if (bac.length()>1)
           bac.setLength(lastback-1);
            etNum.setText(bac);break;
        case R.id.btnAdd:str=str.append(btnAdd.getText());
            int lastAdd=str.length()-2;
            char chLastAdd= str.charAt(lastAdd);
            //игнорирует один оператор '-' в начале пустой оператор
            if(str.charAt(1)=='-'&&str.length()==2){
                etNum.setText(" -");}
            //меняет  на оператор '+', если до этого был введен другой оператор
             else if ((chLastAdd=='-')||(chLastAdd=='/')||(chLastAdd=='*')||(chLastAdd=='+')){
                StringBuilder sb = new StringBuilder(str);
                sb.setCharAt(lastAdd,'+');
                sb.setLength(lastAdd + 1);
                etNum.setText(sb);
                //не дает ввести вначале пустой строки оператор'+'
             }else if(str.charAt(1)=='+'){
                 etNum.setText(" ");}
              else
                etNum.setText(str);
            break;
 
        case R.id.btnDiv: str=str.append(btnDiv.getText());
            int lastDiv =str.length()-2;
            char chLastDiv =str.charAt(lastDiv);
            //игнорирует один оператор '-' в начале пустой строки
            if(str.charAt(1)=='-'&&str.length()==2){
                etNum.setText(" -");}
            //меняет  на оператор '/', если до этого был введен другой оператор
            else if((chLastDiv=='/')||(chLastDiv=='*')||(chLastDiv=='-')||(chLastDiv=='+')){
                StringBuilder sb = new StringBuilder(str);
                sb.setCharAt(lastDiv,'/');
                sb.setLength(lastDiv + 1);
                etNum.setText(sb);
                //не дает ввести вначале пустой строки оператор'/'
            }else if(str.charAt(1)=='/'){
                etNum.setText(" ");
            }else
                etNum.setText(str);
            break;
 
        case R.id.btnSub: str.append(btnSub.getText());
            int lastSub = str.length()-2;
            char chLastSub = str.charAt(lastSub);
            //меняет  на оператор '-', если до этого был введен другой оператор
            if((chLastSub=='-')||(chLastSub=='+')||(chLastSub=='/')||(chLastSub=='*')){
                StringBuilder sb = new StringBuilder(str);
                sb.setCharAt(lastSub,'-');
                sb.setLength(lastSub + 1);
                etNum.setText(sb);
            }else
                etNum.setText(str);
            break;
 
        case R.id.btnMul: str.append(btnMul.getText());
            int lastMul = str.length()-2;
            char chLastMul = str.charAt(lastMul);
            //игнорирует один оператор '-' в начале пустой строки
            if(str.charAt(1)=='-'&&str.length()==2){
            etNum.setText(" -");}
            //меняет  на оператор '*', если до этого был введен другой оператор
            else if((chLastMul=='/')||(chLastMul=='*')||(chLastMul=='-')||(chLastMul=='+')){
                StringBuilder sb = new StringBuilder(str);
                sb.setCharAt(lastMul, '*');
                sb.setLength(lastMul+1);
                etNum.setText(sb);
                //не дает ввести вначале пустой строки оператор'*'
            }else if(str.charAt(1)=='*'){
                etNum.setText(" ");}
 
            else
                etNum.setText(str);
            break;
        case R.id.btnAnswer:
            //выводит результат введенного числового выражения
            PolishNatation answ = new PolishNatation();
            String exp = etNum.getText().toString();
            answ.value(exp);
            String expOut = String.valueOf(answ.value(exp));
            etNum.setText(" "+expOut);
            break;
        case R.id.btnClin:
            etNum.setText(" ");
 
        default:
            System.out.print("bag");
    }
}
 
class PolishNatation{
    // присваивание операторам приоритетов
    boolean isOperator(char c){
        return c=='+'||c=='-'||c=='/'||c=='*';
    }
    int prority(char oper){
        if(oper=='*'||oper=='/'){
            return 1;
        }else if(oper=='+'||oper=='-'){
            return 0;
        }else {
            return -1;
        }
    }
    // выполнение действий
    void calculatoin(LinkedList<Float>st,char oper) {
        float firstValue = st.removeLast();
        float secondValue = st.removeLast();
        switch (oper) {
            case '+':
                st.add(secondValue + firstValue);
                break;
            case '-':
                st.add(secondValue - firstValue);
                break;
            case '/':
                st.add(secondValue / firstValue);
                break;
            case '*':
                st.add(secondValue * firstValue);
                break;
            default:
                System.out.print("bag");
        }
    }
    float value(String exp) {
        //убирает пробелы с введенного выражения;меняеет "(-" на "(0-"
        exp = exp.replace(" ","").replace("(-","(0-");
        if (exp.charAt(0)=='-'){
            //если первым введен '-' то меняем "-" на "0-"
            exp = "0"+exp;
        }
 
        LinkedList<Float> someValue = new LinkedList<>();// для чисел
        LinkedList<Character> someOperator = new LinkedList<>();//для операторов
        for (int i = 0; i < exp.length(); i++) {
            char compare = exp.charAt(i);
            if (compare == '(') {
                someOperator.add('(');
            } else if (compare == ')') {
                while (someOperator.getLast() != '(') {
                    calculatoin(someValue, someOperator.removeLast());
                }
                someOperator.removeLast();
            } else if (isOperator(compare)) {
                while (!someOperator.isEmpty() && prority(someOperator.getLast()) >= prority(compare)) {
                    calculatoin(someValue, someOperator.removeLast());
                }
                someOperator.add(compare);
            }
            else {
                //если operand число (целое или дробное) передаем его в  someValue
                String operand = "";
                while (i < exp.length() && (Character.isDigit(exp.charAt(i))||exp.charAt(i)=='.')) {
                    operand = operand + exp.charAt(i++);
                }
                i--;
                someValue.add(Float.parseFloat(operand));
            }
        }
        while (!someOperator.isEmpty()) {
            calculatoin(someValue, someOperator.removeLast());
        }
        float a = someValue.getFirst();
        int b = (int)a;
         if(a %1==0){
            return b;}else
        return a;
    }
}
 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
 
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
 
    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
 
    return super.onOptionsItemSelected(item);
}}
Ответ:
Сообщение от Leon_SA
Ваши коментарии по сокращению или улучшению кода
а можно не по сокращению а по увеличению? (функциональности)
сделайте функцию сохранения истории расчетов на флеху.
Вопрос: Запуск 2 приложений в одном

Приветики форумчане Давно к Вам не заходила) у меня появился вопрос. Вот есть у меня исходники двух приложений. Как мне сделать чтобы в первом приложении была кнопка при нажатии на которую происходил переход на второе приложение? я что-то не могу ничего найти(( помогите?
Ответ:
Сообщение от AleksandraPun
Как мне сделать чтобы в первом приложении была кнопка при нажатии на которую происходил переход на второе приложение?

(Возможно, работает также )
Я бы поставил ещё try-catch на случай, если приложение не существует.
Вопрос: Первое приложение - нужно ваше мнение!

Добрый день. Создали с мужем уникальное и действительно хорошее приложение для похудения. Система похудения реально работает (до этого был сайт с этой же системой, но более "бедным" функционалом). Проблема в том, что конкуренция очень велика в этой области и подняться в топ, не вкладывая дополнительно денег практически не реально. А находясь на 170 месте, по запросу похудение, найти нас просто не реально. Закачки есть (люди идут с сайта на котором как раз эта система), люди пользуются, но что бы подняться на вверх нужны какие-либо координальные действия.  Пожалуйста, поделитесь секретами бесплатной раскрутки мобильных приложений. И второй вопрос. Что вам кажется не удобным в приложении? Все ли понятно? Удобная навигация или нет? Помогите плиз. Я всю душу в этот проект вложила, 2 года все продумывала, как это все сделать что бы людям было удобно и хорошо пользоваться.  А главное, что люди на системе реально худеют без вреда здоровью  и в форме игры. 
(IMG:)(IMG:)(IMG:)(IMG:)(IMG:)(IMG:) Заранее огромное спасибо за ответы, даже если это будет критика. 

Ссылка на само приложение: 

Это сообщение отредактировал(а) kisa888 - 15.12.2015, 01:35
Ответ:
Добрый день. Создали с мужем уникальное и действительно хорошее приложение для похудения. Система похудения реально работает (до этого был сайт с этой же системой, но более "бедным" функционалом). Проблема в том, что конкуренция очень велика в этой области и подняться в топ, не вкладывая дополнительно денег практически не реально. А находясь на 170 месте, по запросу похудение, найти нас просто не реально. Закачки есть (люди идут с сайта на котором как раз эта система), люди пользуются, но что бы подняться на вверх нужны какие-либо координальные действия.  Пожалуйста, поделитесь секретами бесплатной раскрутки мобильных приложений. И второй вопрос. Что вам кажется не удобным в приложении? Все ли понятно? Удобная навигация или нет? Помогите плиз. Я всю душу в этот проект вложила, 2 года все продумывала, как это все сделать что бы людям было удобно и хорошо пользоваться.  А главное, что люди на системе реально худеют без вреда здоровью  и в форме игры. 
(IMG:)(IMG:)(IMG:)(IMG:)(IMG:)(IMG:) Заранее огромное спасибо за ответы, даже если это будет критика. 

Ссылка на само приложение: 

Это сообщение отредактировал(а) kisa888 - 15.12.2015, 01:35
Вопрос: Данные или размер приложения после установки

Такая проблема, делал приложение пару месяцев, регулярно его тестировал, но перед тем как залить в маркет установил рекламу адмоб, к слову мое первое приложение, так после установки рекламы заметил такую вещь, уже после того как в маркет кинул, данные приложения после каждого запуска набирают в весе, в версии без рекламы такого не происходит. Можете объяснить в чем дело и как это исправить??? (вес почти 20, но как то дошло до 30мб, соответственно хочу исправить)
в приложении имеется WRITE_EXTERNAL_STORAGE думал причина в нем, удалил, ничего не изменилось. есть предположение, что это кэширование адмоб, но вес падает не в кэш, а в данные... если нет возможности убрать кэширование, то можно ли хотя бы поставить лимит в 5-10 мб, что бы приложение не росло в безлим по мб...

и еще вопросик, тоже самое происходит с гугл мапс после просмотра карты, как этот эффект так же удалить? (вопрос для саморазвития)

буду очень благодарен..
Ответ: Я бы запустил приложение на эмуляторе и посмотрел что за файлы. В адмоб нет методов управления кешем, только размером банера.
Вопрос: Одно приложение вконтакте работает, а второе нет

Создал одно приложение работает с контактом нормально. Создаю другое приложение, регистрирую вконтакте его, получаю другое id. И потом просто копирую код во второе приложение из первого и во втором приложении в url для запроса на токен меняю только id. В итоге получается что первое приложение работает нормально а второе падает с ошибкой. Почему такое происходит??Подскажите пожалуйста??
Ответ: забыл

Добавлено через 16 секунд
спасибо
Вопрос: Приложение работает не со всеми версиями на Genymotion

Коллеги, помогите. Не могу понять, просмотрел уже все темы, почему приложение запускается не со всеми версиями. Даже есть такое как на Nexus 4 4.4.4 API 19 не запускается а на Nexus 5 4.4.4 API 19 запускается. С чего начинать копать (это мое первое приложение).

Добавлено через 1 минуту
Забыл сказать, что первый layuot запускается всегда, а второй от кнопки с первого нет.
Ответ: Да все работает после замены "N/A" на число.
Вопрос: Как остановить и восстановить приложение?

Значится так. Я пишу свое первое приложение, тестирую на Android 4.4. Если я зажимаю левую кнопку появляется стандартная меню для очистки памяти. Я ничего не очищаю, просто жму кнопку назад. За это время пролетают следующие маркеры:
ACT-AM_ON_PAUSE_CALLED
ACT-PAUSE_ACTIVITY
ACT-STOP_ACTIVITY_SHOW
ACT-AM_ON_RESUME_CALLED
ACT-RESUME_ACTIVITY
Это все оказывает на приложение нужный эффект, который я хочу добиться. В общем как это все программно сымитировать ?)
Ответ: vxg, спасибо, то что нужно. Открыл для себя сервисы
Вопрос: Нужна критика по приложению

Доброго времени суток всем разработчикам. Хотел бы попросить вас попробовать мое первое приложение с голосовым интерфейсом (распознавание и синтез речи) и получить комментарии на его счет. Важна критика, чтобы понять ошибки. Игра в города с голосовым взаимнодействием: Спасибо!
Ответ: Ваще гениальная игра, наставил пятерок!
Вопрос: Как вызвать метод только при последующих запусках приложения?

Доброго времени суток))) В приложении реализую систему сохранения. Нужно, чтобы при первом запуске появлялись "дефолтные" значения, а при следующих запусках эти значения были теми, которые я выставил и сохранил. Метод сохранения реализовать удалось и работает исправно. Однако "дэфолтные" значения у меня не отображаются при первом запуске.
Java
1
2
3
4
5
6
private static String Name_Time = Integer.toString(R.string.text_time);
private static String Name_Volume = Integer.toString(R.string.text_volume);
 
SharedPreferences sharedPreferences;
final String SAVED_TIME = "Saved_Time";
final String SAVED_VOLUME = "Saved_Volume";
по "дэфолту" у меня Name_Time и Name_Volume, которые у меня меняются по кнопке:
Java
1
2
3
4
5
6
public void onClick(DialogInterface dialog, int which) {
                            Name_Time = set_time.getText().toString();
                            Name_Volume = set_volume.getText().toString();
                            Alarm_it();
                            Save_it();
                        }
Здесь же и вызывается метод Save_it() где значения Name_Time и Name_Volume сохраняются:
Java
1
2
3
4
5
6
7
private void Save_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(SAVED_TIME, Name_Time);
        editor.putString(SAVED_VOLUME, Name_Volume);
        editor.apply();
    }
Теперь мне нужно, чтобы при повторном запуске приложения у меня выставлялись значения Name_Time и Name_Volume:
Java
1
2
3
4
5
6
7
8
9
private void Load_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        String Saved_Time = sharedPreferences.getString(SAVED_TIME, "");
        TextView set_time = (TextView)findViewById(R.id.text_time);
        set_time.setText(Saved_Time);
        String Saved_Volume = sharedPreferences.getString(SAVED_VOLUME, "");
        TextView set_volume = (TextView)findViewById(R.id.text_volume);
        set_volume.setText(Saved_Volume);
    }
Однако при первом запуске приложения у меня вместо "дэфолтных" значений - пусто.
Что я делаю не так?
Ответ: , Вот так Приложение выдаёт ошибку.
Java
1
2
private String Name_Time = getResources().getString(R.string.text_time);
    private String Name_Volume = getResources().getString(R.string.text_volume);
P.S.
Так показывает цифры вместо текста
Java
1
2
private String Name_Time = String.valueOf(R.string.text_time);
    private String Name_Volume = String.valueOf(R.string.text_volume);
Добавлено через 10 минут
Вот так сделал и помогло))
Java
1
2
3
4
5
6
7
8
9
private void Load_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        String Saved_Time = sharedPreferences.getString(SAVED_TIME, getString(Integer.parseInt(Name_Time)));
        TextView set_time = (TextView)findViewById(R.id.text_time);
        set_time.setText(Saved_Time);
        String Saved_Volume = sharedPreferences.getString(SAVED_VOLUME, getString(Integer.parseInt(Name_Volume)));
        TextView set_volume = (TextView)findViewById(R.id.text_volume);
        set_volume.setText(Saved_Volume);
    }