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

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

Войти
Регистрация
Восстановить пароль
 
 
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 156
#1

Перенос Java-кода на платформу Android - Android

02.08.2016, 08:59. Просмотров 644. Ответов 28
Метки нет (Все метки)

Всем доброе утро!
Есть неплохой код.
Но мне оказалось этого мало и хочу перенести на платформу Android с помощью Android Studio.
Подскажите пожалуйста как перенести?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
06.08.2016, 20:07     Перенос Java-кода на платформу Android #21
PS: AVD в Эклипсе тоже есть)))

Добавлено через 4 минуты
Ну что тут сказать, тогда должно работать. Где косяк - надо весь код смотреть...

Добавлено через 10 минут
А ты когда копировал весь предыдущий код активити заменил? Меня интересует такая самая верхняя строчка типа package com.gmail.****.****;
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 156
06.08.2016, 20:09  [ТС]     Перенос Java-кода на платформу Android #22
Короче. Создал я новый проект и сделал все то же самое. Заработало!

А ты когда копировал весь предыдущий код активити заменил? Меня интересует такая самая верхняя строчка типа package com.gmail.****.****;
Тоже обратил внимание еще в предыдущем проекте. Но эту строчку AS добавило автоматически.
В новом проекте эту строчку оставил.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
06.08.2016, 20:12     Перенос Java-кода на платформу Android #23
Поздравляю
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 156
06.08.2016, 22:54  [ТС]     Перенос Java-кода на платформу Android #24
Поздравляю
Было бы с чем. Я даже еще не начал программировать)

Добавлено через 1 час 53 минуты
Объясните пожалуйста как работает эта строчка:

Java
1
2
3
4
5
private final CountDownTimer countDownTimer = new CountDownTimer(countdown, 1000) {
        @Override
        public void onTick(long l) {
            counterTv.setText(String.valueOf(l / 1000));
        }
Я хотел написать countdown--, но он просто отнимает единичку, т.е. работает по другому в отличие от Timer из Swing-а.
В обработчике события попытался написать добавление посредством countdown += 10000, но десятку эту не добавляет или не отображает в TextView.

Думаю, проблема заключена в моем непонимании этой строчки:
Java
1
counterTv.setText(String.valueOf(l / 1000));
Что за l и откуда она берет значения? И почему делится на 1000?

Добавлено через 43 минуты
И еще один вопросик. CountDownTimer не подойдет, чтобы использовать его не в обратном, а в прямом отсчете?
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
06.08.2016, 23:12     Перенос Java-кода на платформу Android #25
Java
1
private final CountDownTimer countDownTimer = new CountDownTimer(countdown, 1000)
Эта строка создает новый таймер обратного отсчета с параметрами countdown и 1000. Первый параметр - общее время работы таймера в миллисекундах. Его можно передать как в виде переменной, так и явно, например:

Java
1
private final CountDownTimer countDownTimer = new CountDownTimer(10000, 1000)
Это будет таймер с временем работы 10 секунд (миллисекунды делим на 1000, получаются секунды).

Второй параметр - интервалы отсчета, тоже в миллисекундах, в данном случае 1 секунда (1000 / 1000).

Таким образом, при запуске у нас создается таймер, в котором через каждую секунду (второй параметр - интервал таймера) генерируется событие onTick, в котором параметр long l - это оставшееся до конца работы таймера время. Опять же в миллисекундах. Мы делим его на 1000, получаем секунды и отображаем их в TextView под названием countTv.
Если это не нужно, эту строку можно убрать.

По окончании работы таймера генерируется событие onFinish().

Добавлено через 7 минут
При создании таймера он получает параметр countdown и запускается на это время (значение переменной coutdown). Изменение переменной countdown во время работы таймера уже никак на его работу не повлияет. Если мы напишем countdown --, то при следующем запуске таймер запустится не на 10000 миллисекунд (к примеру, если countdown была равна 10000), а на 9999 миллисекунд. countdown += 10000 соответственно даст 20 секунд, опять же при следующем запуске.

Добавлено через 3 минуты
А для прямого отсчета есть просто Timer, зачем все делать через известное место? CountDown как бы самим названием намекает, для чего он нужен.
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 156
06.08.2016, 23:14  [ТС]     Перенос Java-кода на платформу Android #26
Изменение переменной countdown во время работы таймера уже никак на его работу не повлияет.
Спасибо! Печалька
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
06.08.2016, 23:18     Перенос Java-кода на платформу Android #27
Печалька
А кто мешает создать отдельную переменную и в событии onTick извращаться над ней как угодно? Хочешь ++, хочешь --, хочешь - матом в TextView написать...

Добавлено через 48 секунд
Или я что-то не понял? Зачем вообще изменять переменную countdown?
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 156
06.08.2016, 23:31  [ТС]     Перенос Java-кода на платформу Android #28
OlegJV, а можно попросить вас написать код для активити и развертки по приведенному 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
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.Timer;
 
import javax.swing.*;
import java.awt.*;
import java.awt.Window;
 
 
public class Timer extends JFrame {
    
    private JLabel timeLabel;
    private Timer timer;
    private JButton start;
    private JTextField addTimeTField;
    private JButton addTime;
    int countdown = 1200;
    private JLabel timeLabelUp;
    private Timer timerUp;
    int countup = 0;
    private JTextField subtractTimeTField;
    private JButton subtractTime;
 
    public Timer() {
        setTitle("Timer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        setLayout(new FlowLayout());
        timeLabel = new JLabel();
        timeLabel.setFont(new Font("Monospaced", Font.BOLD, 60));
        timeLabelUp = new JLabel();
        timer = new Timer(1000, new TimerTick());
        timerUp = new Timer(1000, new TimerTuck());
        start = new JButton("Start");
        addTimeTField = new JTextField(5);
        addTime = new JButton("+");
        subtractTimeTField = new JTextField(5);
        subtractTime = new JButton("-");
 
        addTimeTField.setText("0");
        subtractTimeTField.setText("0");
        start.addActionListener(new TimerTick() {
            public void actionPerformed(ActionEvent e) {
                remove(start);
                add(timeLabel);
                add(addTimeTField);
                add(addTime);
                add(timeLabelUp);
                add(subtractTime);
                add(subtractTimeTField);
                validate();
                repaint();
                timer.start();
            }
        });
 
        addTime.addActionListener(new TimerAddListener() {
            public void actionPerfeermed(ActionEvent e) {
 
                //timerUp.start();
                //repaint();
            }
        });
 
       addTime.addActionListener(new TimerTuck() {
            public void actionPerformed(ActionEvent e) {
                timerUp.start();
            }
        });
 
        subtractTime.addActionListener(new TimerSubtractListener() {
 
        });
 
        add(start);
        setPreferredSize(new Dimension(300, 150));
        setLocationRelativeTo(null);
        pack();
        setAlwaysOnTop(true);
        //setLocationByPlatform(true);
 
 
    } //end class Chronim()
 
    public static void main(String[] args) {
        new Timer().setVisible(true);
    }
    
    class TimerTick implements ActionListener {
 
        public void actionPerformed(ActionEvent e) {
            countdown--;
            timeLabel.setText(String.valueOf(String.format("%02d:%02d:%02d", countdown / 3600, countdown / 60 % 60, countdown % 60)));
            if (countdown == 0) {
                timer.stop();
                timeLabel.setText("TIME OVER!");
            }
        }
        
    } //end inner class TimerTick
 
    class TimerTuck implements ActionListener {
        
        public void actionPerformed(ActionEvent e) {
            countup++;
            timeLabelUp.setText(String.format("%02d:%02d:%02d", countup / 3600, countup / 60 % 60, countup % 60));
            /*if (countup == 10) {
                timerUp.stop();
            }*/
        }
    } //end TimerTuck
 
    class TimerAddListener implements ActionListener {
 
        public void actionPerformed(ActionEvent e) {
           int addcountdown = Integer.parseInt(
                    addTimeTField.getText());
                countdown += 60 * addcountdown;
                countup = 0;
        }
    } //end TimerAddListener
 
    
    class TimerSubtractListener implements ActionListener {
 
        public void actionPerformed(ActionEvent e) {
            int subtractcountdown = Integer.parseInt(
                    subtractTimeTField.getText());
                countdown -= 60 * subtractcountdown;
        }
    } //end TimerSubtractListener
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 00:08     Перенос Java-кода на платформу Android
Еще ссылки по теме:

Перенос проекта из Eclipse в Android Studio Android
Android C++ Qt и java Android отправка SMS
Компиляция кода на C++ под Android Android
Android Перенос проекта с IOS на Android
Android Перенос кода клиент/сервера на Android

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

Или воспользуйтесь поиском по форуму:
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
07.08.2016, 00:08     Перенос Java-кода на платформу Android #29
В самом первом посте в java-коде, как я понял, создается переменная countdown = 10. При каждом событии таймера через 1 секунду (параметр 1000 в таймере) из переменной вычитается единица, и когда она становится равна 0, таймер принудительно останавливается. В нашем случае ничего вычитать не надо, CountDownTimer сам остановится через указанное в countdown время и выдаст событие onFinish().

Добавлено через 5 минут
написать код для активити и развертки по приведенному java-коду
Лучше опишите задачу человеческим языком - что должно отображаться на активити, какие события должны происходить по таймеру. Тупо перевести java-код неблагодарное дело.

Добавлено через 25 минут
Например так, собственно все уже написали ранее, я дополнил комментариями:

Разметка:

Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.gmail.test.myapplication.MainActivity">
 
    <!-- Добавляем на разметку текстовое поле -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:gravity="center" />
 
    <!-- И кнопку -->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
    
</RelativeLayout>


Добавлено через 3 минуты
Активити:

Кликните здесь для просмотра всего текста
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
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    private Button button;
    private TextView textView;
    private CountDownTimer timer;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Находим элементы на разметке
        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.text);
 
        // Назначаем слушатель для кнопки
        button.setOnClickListener(this);
 
    }
 
    @Override
    public void onClick(View view) {
        if (view == button) {
            // Если нажата наша кнопка (их же может быть много)
            // Запускаем таймер (в отдельном методе для наглядности)
            int countdown = 10; // присваиваем значение нашей переменной, раз уж мы к ней привыкли
            // и передаем переменную в таймер
            startTimer(countdown);
        }
    }
 
    private void startTimer(int countdown) {
        // делаем кнопку недоступной, чтоб повторно таймер случайно не запустить - путаница выйдет:
        button.setEnabled(false);
        // запускаем таймер на 10000 миллисекунд
        timer = new CountDownTimer(countdown * 1000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                // тут каждую секунду что-то происходит
                // можем отобразить это в нашем TextView:
                textView.setText(String.valueOf(millisUntilFinished));
                // опять же для наглядности выводим параметр в миллисекундах, не деля его на 1000
                // можем дописать сюда любые другие команды, которые должны выполняться каждую секунду работы таймера
            }
 
            @Override
            public void onFinish() {
                // время вышло, таймер остановился
                // сообщаем об этом в TextView прямо здесь или в другом методе:
                createMessageAboutOurTimer(); // ну такое название мне придумалось
                // возвращаем кнопке нажимабельность
                button.setEnabled(true);
            }
        }.start();
    }
 
    private void createMessageAboutOurTimer() {
        textView.setText("ВРЕМЯ ВЫШЛО");
        // делаем что-нибудь еще - загружаем новый вопрос тестов или что там нужно...
    }
}
Yandex
Объявления
07.08.2016, 00:08     Перенос Java-кода на платформу Android
Ответ Создать тему
Опции темы

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