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

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

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

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

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

Всем доброе утро!
Есть неплохой код.
Но мне оказалось этого мало и хочу перенести на платформу Android с помощью Android Studio.
Подскажите пожалуйста как перенести?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2016, 08:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перенос Java-кода на платформу Android (Программирование Android):

Перенос кода клиент/сервера на Android - Программирование Android
Здравствуйте =) Начал изучать андроид и возникла такая проблема, а именно перенос Java кода в код приложения У меня есть работающий код...

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast - Программирование Android
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка: Caused by: java.lang.ClassCastException:...

Перенос проекта с IOS на Android - Программирование Android
Добрый день. Есть готовый проект для ios. Подскажите, есть ли вариант что-либо импортировать или же переписать код ?

Перенос проекта в Android Studio - Программирование Android
Добрый день! Никак не могу найти как перенести проект со студии на одном компьютере на студию на другом. Возможно ли это? Влияет ли...

Перенос проекта из Eclipse в Android Studio - Программирование Android
У меня есть простенький чат на Java, проблема в том, что мне нужно перенести клиентскую часть на Андройд... Пробовал на Eclipse ставить...

Android studio, перенос строки в текстовом редакторе - Программирование Android
Добрый день. не знаю то ли так было с самого начала,то ли сам напортачил, но как факт: у меня в Android studio при редактировании...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 162
06.08.2016, 19:18  [ТС] #16
А код разметки можно посмотреть? Есть там эти самые R.id.startBtn и R.id.counterTv?
Ну, вот здесь же все. От Паблито:

Перенос Java-кода на платформу Android
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
06.08.2016, 19:26 #17
Ну я думал своя какая-то разметка... Попробуй Build - Clean Project, Rebuild Project...

Добавлено через 2 минуты
Как все создавалось-то? Какой шаблон AS для проекта использовался?
0
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 162
06.08.2016, 19:36  [ТС] #18
Попробуй Build - Clean Project, Rebuild Project...
Нажал, но сразу ничего не произошло. Кроме загрузки процессов..

Как все создавалось-то? Какой шаблон AS для проекта использовался?
Создавалось дня три)) Пока вник с установкой AS (кстати, нельзя ли лучше перейти в Eclipse?). Не нравятся мне все эти AVD, куча ненужных библиотек, все так громоздко.. В общем, получилось запустить сразу с телефона (уже лучше).

Создал проект, а в нем несколько (3 модуля). Один работает, другой почему-то нет. А третий - это пример Паблито. Создал модуль. Нашел код активити - удалил/вставил. Нашел код разметки - удалил/вставил.
Шаблоны все пустые (Blank).
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
06.08.2016, 19:51 #19
При создании проекта AS предлагает варианты - Basic Activity, Empty Activity и так далее. Что было выбрано?
0
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 162
06.08.2016, 19:52  [ТС] #20
Empty Activity

После Clean Project, Rebuild Project..., чет все конкретно подвисло. Я психанул и закрыл через диспетчер задач AS)
И терь компоненты в ComponentTree приобрели восклицательные знаки. Я вообще не понимаю, что происходит.
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
06.08.2016, 20:07 #21
PS: AVD в Эклипсе тоже есть)))

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

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

А ты когда копировал весь предыдущий код активити заменил? Меня интересует такая самая верхняя строчка типа package com.gmail.****.****;
Тоже обратил внимание еще в предыдущем проекте. Но эту строчку AS добавило автоматически.
В новом проекте эту строчку оставил.
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
06.08.2016, 20:12 #23
Поздравляю
1
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 162
06.08.2016, 22:54  [ТС] #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 не подойдет, чтобы использовать его не в обратном, а в прямом отсчете?
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
06.08.2016, 23:12 #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 как бы самим названием намекает, для чего он нужен.
1
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 162
06.08.2016, 23:14  [ТС] #26
Изменение переменной countdown во время работы таймера уже никак на его работу не повлияет.
Спасибо! Печалька
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
06.08.2016, 23:18 #27
Печалька
А кто мешает создать отдельную переменную и в событии onTick извращаться над ней как угодно? Хочешь ++, хочешь --, хочешь - матом в TextView написать...

Добавлено через 48 секунд
Или я что-то не понял? Зачем вообще изменять переменную countdown?
0
msgusa
6 / 6 / 3
Регистрация: 29.06.2011
Сообщений: 162
06.08.2016, 23:31  [ТС] #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
}
0
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
07.08.2016, 00:08 #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("ВРЕМЯ ВЫШЛО");
        // делаем что-нибудь еще - загружаем новый вопрос тестов или что там нужно...
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 00:08
Привет! Вот еще темы с ответами:

Java на Android - Программирование Android
Чисто теоретический вопрос. Почему Григорий Корнеев в своих лекциях http://www.lektorium.tv/lecture/?id=13356 говорит что в Android не...

Java для Android - Программирование Android
Добрый день ! Учу андроид примерно 4 месяца, сделал пару игр (в основе лежит пальцетыкалка ), сейчас думаю идти дальше ( что бы можно...

Синхронизация Android и ПК на Java - Программирование Android
Здравствуйте уважаемые форумчане. Я студентка и только начинаю изучать Java. Преподаватель предложил в качестве курсовой написать на...

Android/Java + checkbox c if - Программирование Android
Всем привет. Недавно начал изучать андроид и возник такой вопрос. Есть три cheсkbox и кнопка button . Хочу сделать так что б при выборе...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.08.2016, 00:08
Ответ Создать тему
Опции темы

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