1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
1

Где взять примеры для чайника

21.09.2019, 10:53. Показов 650. Ответов 20
Метки нет (Все метки)

Поделитесть. Ссылками для чайников. Где все разжеванно

Хожу по Гуглу ищу статьи нахожу много но нигде не написано достаточно разжеванно что бы построить работающий вариант приложения (

Я использую язык kotlin. Может мне перейти на yava?

Чего хочу добиться

Нужно сделать приложение которое будет работать с rest api

Подошёл бы пример где в отдельном классе лежал бы код обращения к серверу

В другом классе были бы описаны методы обращения

В третьем взаимодействие с интерфейсом где мы хватает событие клика по кнопке или открытия окна и выполняем запрос далее получаем результат обрабатываем его и показываем его на экране

Добавлено через 1 минуту
Может есть готовое простое решение? Что бы можно было полазить по нему

Добавлено через 6 минут
Просто из всех статей у меня получается вывести на экран привет мир по клику на кнопку и с такими примерами все ок
Но как только начинаю делать взаимодействие с api все ничего не выходит в лог результат попадает на api запрос уходит далее приходит ответ и у меня получается показать ответ в логе но как вывести этот ответ на экран тут уже не понятно (

Добавлено через 4 минуты
Хотелось бы так же что бы обращение к api производилось в отдельном потоке и на этот момен выводился loader
Что бы юзер понимал что ему нужно подождать

И далее если ошибка выводилось окно типа ошибка связи с интернетом или что то подобное либо данные

Добавлено через 1 час 28 минут
Неужели здесь так мало программистов?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2019, 10:53
Ответы с готовыми решениями:

Где можно взять иконок для приложений?
Так что бы в плеймаркете потом не забанили? И каким софтом можно нарисовать, и подогнать...

Где взять готовые типовые анимации для игр
Есть сайты где можно скачать анимации для игр (снятие жизни, сердечки)?

Где найти примеры игр на Android?
Все доброго уважаемые! Вопрос не тривиальный. Изучаю Android, в пример решил сделать собственное...

Timer для чайника
Второй день издтваюсь над андроид студио. Проблем с хелловордои небыло, а воь с тпймером...

20
115 / 107 / 20
Регистрация: 28.06.2015
Сообщений: 509
21.09.2019, 11:40 2
У вас вопрос то какой? Есть вопрос по коду - задавайте. За вас что то писать, искать и думать никто не будет. Или вы думаете что кому то кроме вас интересно разбираться с вашими идеями, и их реализацией? Нет, никому не интересно.
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
21.09.2019, 11:55 3
Все правильно написано:

Цитата Сообщение от Grigory20191 Посмотреть сообщение
Хожу по Гуглу ищу статьи нахожу много но нигде не написано достаточно разжеванно что бы построить работающий вариант приложения
Нигде не найти документацию, где внятно описано хоть что-то, из чего можно что-то полезное сделать.
Хелоу Ворлд с кнопки - это пожалуйста. И то, повернешь экран, и текст рассыпется.

Одни нарезки, лоскутки, snippets по-ихнему. Которые ни к селу, ни к городу, по-нашему.
0
1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
21.09.2019, 11:55  [ТС] 4
Я не понимаю как вывести результат на экран
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
21.09.2019, 12:01 5
Цитата Сообщение от Grigory20191 Посмотреть сообщение
Я не понимаю как вывести результат на экран
Вывести результат - это фигня. Даже не пол дела.
mTextView.text = "результат".

Но его сначала как-то получить надо.
А потом, как выведешь, еще и удержать на экране в процессе работы устройства.
Устройство может и звонок принять. Или еще какое приложение выскочит. И крутиться в руках.
0
1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
21.09.2019, 19:20  [ТС] 6
Вывести простой присоеный текст у меня получается но послать запрос, принять ответ, разобрать ответ и вывести на экране нет! Из всех статей которые я нашел я сумел дойти только до того где уже вроде как выводим на экран но....
Статья на этом этапе начинается без объяснений таких как например

Создайте класс, создайте интерфейс и т д в итоге в конце статьи пишут тупа код а куда этот код помещать не понятно

Именно поэтому я и обратился на форум что бы люди помогли земному программному!
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
21.09.2019, 22:18 7
https://codelabs.developers.go... damentals/

Начинается с самого простого. Как установить Андроид Студию.

В восьмой части как раз как из интернета получить данные и отобразить.

В двух словах не получится объяснить.
Андроид - это такая хреновина, что можно офигеть. Тут вопрос не в том, как на нем написать программу. Тут вопрос в обратном.
Как вообще кто-то и что-то под него пишет? И это еще у кого-то из писателей как-то работает!

Прикинь. Я простой сисадмин. Под виндой-линюксом я в командной строке делают пинг. И смотрю, кто на него откликается. Легко и просто.
Под андроид есть командная строка. Но набирать на тачпаде одним пальцем на микроскопическом дисплее все то, что набираю на клавиатуре двумя руками всеми 10 пальцами очень не удобно.
Есть на маркете программулины делающие пинг. Но они ВСЕ в лучшем случае с рекламой постоянно всплывающей и мешающей. А в худшем - с закладками.
Поэтому, почему бы самому не написать? Это ж просто. На яве - isReacheble(адрес хоста, тамаут).
Блин! ОДНА КОМАНДА - ОДНА СТРОЧКА! И в винде или линюксе так и есть. Но там это нафиг не надо. Пинг и так нормальный без рекламы во весь экран есть. Ну, как в одну строчку. Обернуть в main(){} Может еще интерфейс добавать. Примеров на свинге в 5 строчек уйма и они все работают. Но это же опять, не нужно. Все и так есть.

Так вот. Казалось бы. Тоже самое в андроиде. Он же на линюксе основан. То же линюксовое ядро. Как нам втирают.
Гы-гы.
В Андроид Студио легко и кнопка и тексвью помещаются на экран. И онклик цепляется, который isReacheble() запускает.
Только он не работает.
Мы ж инженеры. Не дураки. Лог посмотрим. Он весь в красном.
Бред же. Все тоже самое на яве винде и под линюксом работает без проблем.
Гугл нам в помощь. И там оказыватся, что и в Андроиде это работало. Когда-то давно.
Но через несколько лет корпорация добра решила, что надо всем сделать еще больше добра. И сделала, что никакие сетевые функции больше не работают иначе, чем в параллельном от основного потоке.
И теперь вместо одной строчки isReacheble() мы должны ваять вручную целый класс asynctask с тремя-четырьмя методами.
Окей. Свояли. Деваться-то некуда. Вроде даже заработало.
Только вот в конце приписочку обнаруили. Что этот метод устарел и надо использовать asynctaskloager.
Везде пишут, что это замена asynctask-у. Но никто не пишет, что промежуточный результат из него фиг получишь.
Если не один пинг, а сканируем сеть, по диапазону, может быть удобно.
Ладно. Сделали на asynctaskloader-e. Без промежуточных результатов.
И что Вы думаете? Правильно! Это тоже устарело! Надо все делать через фрагменты.
Причем фиг найдешь полный рабочий пример, который можно использовать.
Нашли, сделали. Все работает. Кроме нюанса. Постоянные предупреждения, что динамический класс с сылками на активити или фрагмент может вести к утечке памяти. Делаем стический класс. А он, гад, не может обращаться к виджетам, потому что они динамические.
Пофиг. Много не утечет.
И что вы все думаете? Правильно! Это тоже все устарело. И надо делать все через аркитекча-компонент, лив-дату, вью-модель! Все что было раньше - это все неправльно!
Блин. Все стираем. Переписваем на ливдате, вьюмеделе, лафйциклеоунене!
Как Вы думаете? Да! Это уже тоже все устарело, надо писать все было не на яве, а на котлине.
Все бросаем и начинаем учить котлин. Это только что родившееся чудо, которое растет и мутирует само по себе, каждый месяц меняясь и меняя все библиотеки вокруг себя!
Что было, вчера, сегодня на новом обновлении уже не работает. Все меняется ежечасно.

Вы хотите пример просто запрос на сервер отправить, и получить ответ и отобразить.
На словах это звучит просто. Оно и есть просто в нормальной ситуации. Но на андроиде это будет десятки классов которые надо писать вручную с десятками методов в каждом с извращенной логикой. И то, что вы найдете сегодня, это уже устарело давным давно и на новом релище Андроида скорее всего не заработает.
0
6 / 4 / 2
Регистрация: 20.09.2019
Сообщений: 4
22.09.2019, 01:22 8
Клиент-серверное программирование в Android. Отправить сообщение клиенту и обратно.

Привет всем, сегодня я покажу вам, как вы можете реализовать клиент-серверную архитектуру в среде Android.

Что такое сокет?

Сокет - это интерфейс между приложением и сетью. Тип сокета диктует стиль связи,
надежный и ориентированный на соединение, а не на соединение. После настройки приложение
может передавать данные в сокет для передачи по сети, получать данные из сокета
(передаваемые через сеть другим хостом).


Сокет - это программная конечная точка приложения.
Используя Socket, процесс в одной системе может взаимодействовать с другим процессом в системе.


Давайте посмотрим здесь, как мы можем сделать это в Android.

У меня есть два проекта здесь. Одна - это серверная программа, а другая - клиент.
После запуска обеих программ на двух разных устройствах. Сначала необходимо запустить сервер
на устройстве сервера . Затем клиентское устройство отправит сообщение для подключения и
подключится. После подключения это означает, что соединение с сокетом установлено. Теперь вы
можете отправлять сообщения в обоих направлениях, используя Socket Connection.

Примечание. Для подключения между сокетами оба устройства должны находиться в одной сети
(например, для одного и того же Wi-Fi). Также вам необходимо заменить IP-адрес в клиентской
программе на IP-адрес сервера ( или это будет ваш фактический IP-адрес сервера с открытым
портом специально для связи с вашим устройством ).

Вы можете найти IP-адрес устройства Android, перейдя в Настройки Wi-Fi -> Меню -> Дополнительно.


Добавить разрешение
Код
<uses-permission android:name="android.permission.INTERNET" />
сервер

раскладка

Он будет содержать кнопку для запуска сервера и другую кнопку для отправки сообщения на сервер.

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
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
<?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:id="@+id/activity_server"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context=".ServerActivity">
 
    <Button
        android:id="@+id/start_server"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:onClick="onClick"
        android:text="Start Server" />
 
    <EditText
        android:id="@+id/edMessage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/start_server"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:text="Message from Server" />
 
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/send_data"
        android:layout_below="@+id/edMessage">
 
        <LinearLayout
            android:id="@+id/msgList"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
 
        </LinearLayout>
 
    </ScrollView>
 
    <Button
        android:id="@+id/send_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/button_pressed"
        android:onClick="onClick"
        android:text="Send Message to Client"
        android:textColor="@android:color/white" />
 
</RelativeLayout>
Активность сервера

Сначала мы собираемся создать приложение для сервера, так что это будет
MainActivity для этого проекта.

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
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
package com.coderzheaven.clientserverdemo;
 
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class ServerActivity extends AppCompatActivity implements View.OnClickListener {
 
    private ServerSocket serverSocket;
    private Socket tempClientSocket;
    Thread serverThread = null;
    public static final int SERVER_PORT = 3003;
    private LinearLayout msgList;
    private Handler handler;
    private int greenColor;
    private EditText edMessage;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_server);
        setTitle("Server");
        greenColor = ContextCompat.getColor(this, R.color.green);
        handler = new Handler();
        msgList = findViewById(R.id.msgList);
        edMessage = findViewById(R.id.edMessage);
    }
 
    public TextView textView(String message, int color) {
        if (null == message || message.trim().isEmpty()) {
            message = "<Empty Message>";
        }
        TextView tv = new TextView(this);
        tv.setTextColor(color);
        tv.setText(message + " [" + getTime() +"]");
        tv.setTextSize(20);
        tv.setPadding(0, 5, 0, 0);
        return tv;
    }
 
    public void showMessage(final String message, final int color) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                msgList.addView(textView(message, color));
            }
        });
    }
 
    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.start_server) {
            msgList.removeAllViews();
            showMessage("Server Started.", Color.BLACK);
            this.serverThread = new Thread(new ServerThread());
            this.serverThread.start();
            return;
        }
        if (view.getId() == R.id.send_data) {
            String msg = edMessage.getText().toString().trim();
            showMessage("Server : " + msg, Color.BLUE);
            sendMessage(msg);
        }
    }
 
    private void sendMessage(final String message) {
        try {
            if (null != tempClientSocket) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        PrintWriter out = null;
                        try {
                            out = new PrintWriter(new BufferedWriter(
                                    new OutputStreamWriter(tempClientSocket.getOutputStream())),
                                    true);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        out.println(message);
                    }
                }).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    class ServerThread implements Runnable {
 
        public void run() {
            Socket socket;
            try {
                serverSocket = new ServerSocket(SERVER_PORT);
                findViewById(R.id.start_server).setVisibility(View.GONE);
            } catch (IOException e) {
                e.printStackTrace();
                showMessage("Error Starting Server : " + e.getMessage(), Color.RED);
            }
            if (null != serverSocket) {
                while (!Thread.currentThread().isInterrupted()) {
                    try {
                        socket = serverSocket.accept();
                        CommunicationThread commThread = new CommunicationThread(socket);
                        new Thread(commThread).start();
                    } catch (IOException e) {
                        e.printStackTrace();
                        showMessage("Error Communicating to Client :" + e.getMessage(), Color.RED);
                    }
                }
            }
        }
    }
 
    class CommunicationThread implements Runnable {
 
        private Socket clientSocket;
 
        private BufferedReader input;
 
        public CommunicationThread(Socket clientSocket) {
            this.clientSocket = clientSocket;
            tempClientSocket = clientSocket;
            try {
                this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
            } catch (IOException e) {
                e.printStackTrace();
                showMessage("Error Connecting to Client!!", Color.RED);
            }
            showMessage("Connected to Client!!", greenColor);
        }
 
        public void run() {
 
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    String read = input.readLine();
                    if (null == read || "Disconnect".contentEquals(read)) {
                        Thread.interrupted();
                        read = "Client Disconnected";
                        showMessage("Client : " + read, greenColor);
                        break;
                    }
                    showMessage("Client : " + read, greenColor);
                } catch (IOException e) {
                    e.printStackTrace();
                }
 
            }
        }
 
    }
 
    String getTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        return sdf.format(new Date());
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != serverThread) {
            sendMessage("Disconnect");
            serverThread.interrupt();
            serverThread = null;
        }
    }
}
клиент

Теперь, когда сервер готов, мы собираемся создать файлы для клиентского проекта.
Убедитесь, что оба проекта разные для лучшего понимания.

раскладка
Макет клиента будет содержать кнопку для отправки сообщения на сервер.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_server"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp">
 
    <Button
        android:id="@+id/connect_server"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:onClick="onClick"
        android:text="Connect to server" />
 
    <EditText
        android:id="@+id/edMessage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/connect_server"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:text="Message from Client" />
 
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/send_data"
        android:layout_below="@+id/edMessage">
 
        <LinearLayout
            android:id="@+id/msgList"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical" />
 
    </ScrollView>
 
    <Button
        android:id="@+id/send_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/button_pressed"
        android:onClick="onClick"
        android:text="Send Message to server"
        android:textColor="@android:color/white" />
 
</RelativeLayout>
Активность клиентов

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
package com.coderzheaven.clientapplication;
 
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class ClientActivity extends AppCompatActivity implements View.OnClickListener {
 
    public static final int SERVERPORT = 3003;
 
    public static final String SERVER_IP = "YOUR_SERVER_IP";
    private ClientThread clientThread;
    private Thread thread;
    private LinearLayout msgList;
    private Handler handler;
    private int clientTextColor;
    private EditText edMessage;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_client);
 
        setTitle("Client");
        clientTextColor = ContextCompat.getColor(this, R.color.green);
        handler = new Handler();
        msgList = findViewById(R.id.msgList);
        edMessage = findViewById(R.id.edMessage);
    }
 
    public TextView textView(String message, int color) {
        if (null == message || message.trim().isEmpty()) {
            message = "<Empty Message>";
        }
        TextView tv = new TextView(this);
        tv.setTextColor(color);
        tv.setText(message + " [" + getTime() + "]");
        tv.setTextSize(20);
        tv.setPadding(0, 5, 0, 0);
        return tv;
    }
 
    public void showMessage(final String message, final int color) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                msgList.addView(textView(message, color));
            }
        });
    }
 
    @Override
    public void onClick(View view) {
 
        if (view.getId() == R.id.connect_server) {
            msgList.removeAllViews();
            showMessage("Connecting to Server...", clientTextColor);
            clientThread = new ClientThread();
            thread = new Thread(clientThread);
            thread.start();
            showMessage("Connected to Server...", clientTextColor);
            return;
        }
 
        if (view.getId() == R.id.send_data) {
            String clientMessage = edMessage.getText().toString().trim();
            showMessage(clientMessage, Color.BLUE);
            if (null != clientThread) {
                clientThread.sendMessage(clientMessage);
            }
        }
    }
 
    class ClientThread implements Runnable {
 
        private Socket socket;
        private BufferedReader input;
 
        @Override
        public void run() {
 
            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
                socket = new Socket(serverAddr, SERVERPORT);
 
                while (!Thread.currentThread().isInterrupted()) {
 
                    this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String message = input.readLine();
                    if (null == message || "Disconnect".contentEquals(message)) {
                        Thread.interrupted();
                        message = "Server Disconnected.";
                        showMessage(message, Color.RED);
                        break;
                    }
                    showMessage("Server: " + message, clientTextColor);
                }
 
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
 
        }
 
        void sendMessage(final String message) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (null != socket) {
                            PrintWriter out = new PrintWriter(new BufferedWriter(
                                    new OutputStreamWriter(socket.getOutputStream())),
                                    true);
                            out.println(message);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
 
    }
 
    String getTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        return sdf.format(new Date());
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != clientThread) {
            clientThread.sendMessage("Disconnect");
            clientThread = null;
        }
    }
}
Если клиент или сервер завершают работу, он отправляет команду «Отключить» .
Таким образом, узел будет знать, что другой процесс отключен.
1
1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
22.09.2019, 10:29  [ТС] 9
Вопрос закрыт справился сам! Всем спасибо!

Добавлено через 38 секунд
Запрос уходит на сервер далее ответ выводится на экран
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
22.09.2019, 10:54 10
Цитата Сообщение от Grigory20191 Посмотреть сообщение
Вопрос закрыт справился сам! Всем спасибо!
Рассказали бы как справились.
Люди с таким вопросом сюда приходят постоянно, а ответа ни от кого нет.
0
1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
22.09.2019, 11:36  [ТС] 11
Я чуть позже все напишу сюда выложу коды всех классов, интерфейсов

Добавлено через 2 минуты
При открытии приложения производится запрос а так же по клику на кнопку

просто я все никак не мог понять как производится взаимодействие классов, интерфейсов с окнами а как понял то все получилось.

Теперь будет ещё несколько вопрос каку функцию забрать на обновление информации когда пальцем в низ сдвигаешь
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
22.09.2019, 12:04 12
Цитата Сообщение от Grigory20191 Посмотреть сообщение
обновление информации когда пальцем в низ сдвигаешь
https://developer.android.com/training/swipe

Свайп-ту-рефреш называется.
Через <SwipeRefreshLayout в раскладке делается. И SwipeRefreshLayout.OnRefreshListener

Добавлено через 4 минуты
Цитата Сообщение от Grigory20191 Посмотреть сообщение
Я чуть позже все напишу сюда выложу коды всех классов, интерфейсов
К черту подробности. Какая планета?.. Тьфу.. Какую библиотеку используете?
Ретрофит? Воллей? Okhttp3 ?
0
115 / 107 / 20
Регистрация: 28.06.2015
Сообщений: 509
22.09.2019, 12:14 13
Цитата Сообщение от vs2019 Посмотреть сообщение
Хелоу Ворлд с кнопки - это пожалуйста. И то, повернешь экран, и текст рассыпется.
Так это у вас нет фундаментальных знаний о жизненном цикле. Обязательно нужно знать. А то все будет сыпаться.
Вот https://developer.android.com/... cle#kotlin
Но помните, у Активити, и Фрагмента, жизненные циклы разные, но связанные. Так что это всегда нужно учитывать.
А то что что устарело, так не страшно, главное что бы вас устраивало. Оно хоть и устарело но работает. Если вас расстаривать зачеркнуты код, против это есть такая штука.@SuppressWarnings("deprecation")

А котлин или ява, так вообще условности, пишите на ява, потом в сутдии есть кнопка, если жмакнуть все переведет на котлин.
Это скорей политическое решение ибо Оракл задолбил судебными исками, очень хочет бабла. Очень.
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
22.09.2019, 12:25 14
Цитата Сообщение от Vladimir93 Посмотреть сообщение
Так это у вас нет фундаментальных знаний о жизненном цикле.
Для того что б текст сохранился не надо так много знать.
Специально запутывают и усложняют.
Все просто. Если это редактируемый текст, то он сохраняется автоматом. И никто не знает как. Всем плевать.
А вот просто ТекстВью, не редактируемый, вот он всегда теряет в новой активити все изменения, сделанные в процессе работы предыдущей активити. Так вот. Что бы ТекстВью вел себя как ЕдитТекст, надо всего навсего выстваить в тру freezesText.
И об этом никто не говорит. Власти скрывают... Что бы все мучились и извращались.
0
115 / 107 / 20
Регистрация: 28.06.2015
Сообщений: 509
22.09.2019, 13:05 15
Так суть то там не в тексте, а в том что при повороте активность уничтожается и пересоздается. Там утрачиваются все значения переменных, нарушается работа потоков, фрагменты падают. И т.д. и т.п.
Если вас интересует простой вариант, то есть директива которая запрещает переворот. Но это не всегда выход.
XML
1
2
 <activity android:name=""
   android:screenOrientation="nosensor"></activity>
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
22.09.2019, 13:13 16
Цитата Сообщение от Vladimir93 Посмотреть сообщение
то есть директива которая запрещает переворот.
Вы намеренно freezesText игнорируете?

Добавлено через 32 секунды
Я вам всем ПРАВДУ открыл, которую все скрывают. А Вы игнорируете.

Добавлено через 2 минуты
Цитата Сообщение от Vladimir93 Посмотреть сообщение
Там утрачиваются все значения переменных,
ЕдитТекст ничего не утрачивает. Все сохраняется без плясок и бубнов.
А ТекстВью - НЕТ! Устраиваете пляски и бой в бубны!
Вот в чем суть.
А ключик очень простой в наличии есть. Много времени и нервов сохранит, если знать его.
0
1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
22.09.2019, 17:23  [ТС] 17
Retrofit юзаю но что даст название библиотеки тем кто задаёт подобные вопросы как у меня?
В Гугл выливает кучу статей как это сделать но ни в одной я не нашел толковых описаний и все время не получалось пока сам не догнал как это делается!
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
22.09.2019, 23:38 18
Не может быть. У гугла специально для начинающих разработчиков есть Android Kotlin Fundamentals Course.
https://codelabs.developers.go... damentals/

Там и ретрофит как раз есть в примерах.

Кстати, все эти codelabs, если простые, то начинаются с создания проекта с пустой активити.
А когда на одной-двух-трех страницах код не получается, то загружается заготовка.
И по теме урока идет правка кода.

Цитата Сообщение от Grigory20191 Посмотреть сообщение
Retrofit юзаю но что даст название библиотеки тем кто задаёт подобные вопросы как у меня?
Просто пообщаться. Вы колбэки используете или корутины?
Насколько корутины удобнее колбэков?
Может сможете адептам явы объяснить, чего они теряют?

Цитата Сообщение от Grigory20191 Посмотреть сообщение
ни в одной я не нашел толковых описаний и все время не получалось пока сам не догнал как это делается!
codelabs от гугла вполне себе толковые.
Плюс документация на сайте разработчиков.
Самому тут никак не получится. Если только самому с нуля через сокеты.
Но это все равно не самому, а придется читать документацию примерами на пакет java.net
То есть читать самому придется.

Еще есть udacity.com уроки, бесплатные в том числе. Но там немного устаревшие. Полезно проходя их читать новости на сайте разработчиков библиотек. API постоянно меняются. Добавляются новые удобные фитчи.
0
1 / 1 / 0
Регистрация: 19.09.2019
Сообщений: 102
23.09.2019, 07:21  [ТС] 19
Вы мне такие вопросы задаёте как будто я программист высшего класса (колбэкия я юзаю)

Я за андроид взялся четыре дня назад.
0
30 / 24 / 6
Регистрация: 23.06.2019
Сообщений: 147
23.09.2019, 13:56 20
Цитата Сообщение от Grigory20191 Посмотреть сообщение
Вы мне такие вопросы задаёте как будто я программист высшего класса
Программисты высшего класса на все вопросы тут одну ссылку на начальную страницу гугла дают. Тупо http://www.google.com
Так что, остается общаться только с новичками. Пока они не стали высшего класса. С одним ответом на все вопросы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2019, 13:56

Android для чайника
Есть идея написания приложения под Андроид, что то типа интернет магазина с онлайн оплатой и...

Где взять примеры заданий для 8.1
Здравствуйте коллеги. Подскажите где в инете можно взять (скачать) задачи по 1с 8.1. Прочитал...

Где взять примеры работающих Workflow?
Dobrogo vremeni sutok, ja sovsem novichok v dele Worflow, EAI i t.d. Mne nuzhno pozarez srochno...

А где взять компилятор по паскалю, примеры и все такое?
А где взять компилятор по паскалю, примеры и все такое? Тоже хочу попробовать водичку.


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

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

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