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

Клиент-серверное приложение - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Android L http://www.cyberforum.ru/android-dev/thread1279756.html
Привет всем дорогие друзья. Меня вот что интересует. Знаю что достаточно времени назад вышел L для разработчиков. Гайды по оформлению и новым технологиям я конечно читал, но не пробовал пока. Такой вопрос, понятно что приложение написанное под L не будет работать на других версиях. Так как же быть, чтобы адаптировать старые под новые и наоборот? Будет как с дроидом 2 и 4. Можно сказать что "два...
Android Простое Клиент-Серверное приложение Добрый день, начал осваивать андройд, и застопорился на некоторых моментах, вернее, Оно почему-то не работает, просто не коннектит к серверу. Сервер на моем домашнем компе, телефон используется для запуска клиента через Андройд Студию. Не могли бы сказать в чем ошибка? Интернет дома подключен через мегафон 4г. Заранее спасибо. Клиент. import android.app.Activity; import... http://www.cyberforum.ru/android-dev/thread1279690.html
Обновление без google play Android
Всем привет! Цель следующая : надо сделать автообновление без участия человека, то есть запустить интент со старнадртным окном загрузки я конечно могу. А вот как сделать именно автоматическое обновление не могу понять.
Android Как создать анонимный об. GregorianCalendar с поступающими hour и minute?
Вот код где я успешно использовал полученые данные и присвоил их в конце нужному объекту(mDate(15 строка)). // создание объекта Calendar для получения года, месяца и дня Calendar calendar = Calendar.getInstance(); calendar.setTime(mDate); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day =...
Android Работа с Item до нажатия http://www.cyberforum.ru/android-dev/thread1279263.html
Здравствуйте. Есть активити, на ней стоит GridView из адаптера. По нажатию на изображение на нем ставится галочка, это описано в селекторе, номер выбранного изображения записывается в Preference. Затем активити закрываем и открываем снова, необходимо поставить галочку на изображение, на котором стояла до закрытия, ДО нажатия на другое изображение (в OnCreate). Добавлено через 2 минуты То есть...
Android Настройка openFrameworks для Android в Eclipse Подскажите пожалуйста как правильно настроить в Eclipse openFrameworks для Android. Уже вторую неделю мучаюсь с настройкой и запуском. Качал OF для Андроида с оф.сайта http://openframeworks.cc/ в разделе downloads. При настройке Eclipse и всех дополнительных средств пользовался инструкциями: 1) How to setup openFrameworks for Android on Windows (... подробнее

Показать сообщение отдельно
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170

Клиент-серверное приложение - Android

20.10.2014, 02:26. Просмотров 665. Ответов 7
Метки (Все метки)

Всем привет!)
Возникла такая проблема есть серверное приложение(на Java) и есть к нему клиент(так же на Java).
Однако при написании того же клиента на андройд, возникает проблема, при получении ответа от сервера(строки) они заносятся в ListView, однако заносится лишь первая переданная строка, остальные же хоть и отображаются и на сервере и в клиенте(на компе), в ListView не заносятся
В чем может быть проблема?

код сервера:
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
public class Server {
 
    ArrayList outputStream; // используем ArrayList для хранения входящих сообщений
    
    public class ClientHandler implements Runnable{
 
        BufferedReader buffer;
        Socket sock;
        
        public ClientHandler(Socket clientSocket){
            try{        
            sock = clientSocket;
            InputStreamReader reader = new InputStreamReader(sock.getInputStream());
            buffer = new BufferedReader(reader);
            
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        
        @Override
        public void run() {
            String message;
            try{
                while((message = buffer.readLine()) != null){
                    System.out.println("читается "+message);
                    tellEveryone(message);
            }
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
        
    }
    
    public static void main(String[] args) {
        new Server().go();
    }
    
    public void go(){
        outputStream = new ArrayList();
        try{
            ServerSocket  serverSocket = new ServerSocket(5000);
        while(true){
            
            Socket clientSocket = serverSocket.accept();
            PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
            outputStream.add(writer);
            
            Thread t = new Thread(new ClientHandler(clientSocket));
            t.start();
            System.out.println("Клиент подключен");
        }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public void tellEveryone(String message){
        
        Iterator it = outputStream.iterator();
        while(it.hasNext()){
            try{
            PrintWriter writer = (PrintWriter) it.next();
            writer.println(message);
            writer.flush();
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
}
код клиента:
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
public class Client {
    
    
    JTextArea incoming;
    JTextField outgoing;//текстовое поле для отправки текста на сервер
    BufferedReader reader;
    PrintWriter writer;
    Socket sock;
    
    public void go(){
        /*формируем GUI */
        
        JFrame frame = new JFrame("My chat client");
        JPanel mainPanel = new JPanel();
        incoming = new JTextArea(15,28);
        incoming.setLineWrap(true);
        incoming.setEditable(false);
        JScrollPane qScroller = new JScrollPane(incoming);
        qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        outgoing = new JTextField(20);
        JButton btnSend = new JButton("Отправить");
        btnSend.addActionListener(new SendButtonListener());
        mainPanel.add(qScroller);
        mainPanel.add(outgoing);
        mainPanel.add(btnSend);
        setUpNetworking();
        public class Client {
    
    
    JTextArea incoming;
    JTextField outgoing;//текстовое поле для отправки текста на сервер
    BufferedReader reader;
    PrintWriter writer;
    Socket sock;
    
    public void go(){
        /*формируем GUI */
        
        JFrame frame = new JFrame("My chat client");
        JPanel mainPanel = new JPanel();
        incoming = new JTextArea(15,28);
        incoming.setLineWrap(true);
        incoming.setEditable(false);
        JScrollPane qScroller = new JScrollPane(incoming);
        qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        outgoing = new JTextField(20);
        JButton btnSend = new JButton("Отправить");
        btnSend.addActionListener(new SendButtonListener());
        mainPanel.add(qScroller);
        mainPanel.add(outgoing);
        mainPanel.add(btnSend);
        setUpNetworking();
        public class Client {
    
    
    JTextArea incoming;
    JTextField outgoing;//текстовое поле для отправки текста на сервер
    BufferedReader reader;
    PrintWriter writer;
    Socket sock;
    
    public void go(){
        /*формируем GUI */
        
        JFrame frame = new JFrame("My chat client");
        JPanel mainPanel = new JPanel();
        incoming = new JTextArea(15,28);
        incoming.setLineWrap(true);
        incoming.setEditable(false);
        JScrollPane qScroller = new JScrollPane(incoming);
        qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        outgoing = new JTextField(20);
        JButton btnSend = new JButton("Отправить");
        btnSend.addActionListener(new SendButtonListener());
        mainPanel.add(qScroller);
        mainPanel.add(outgoing);
        mainPanel.add(btnSend);
        setUpNetworking();
        Thread readThread = new Thread(new IncomingReader());
        readThread.start();
        
        frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
        frame.setVisible(true);
        frame.setSize(350, 350);
    }
    
    
    public void setUpNetworking(){
        
        try{
            sock = new Socket("192.168.0.101", 5000);
            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(streamReader);
            writer = new PrintWriter(sock.getOutputStream());
            System.out.println("Соединение установленно...");
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
    
    
 
    public static void main(String[] args) {
        Client client = new Client();
        client.go();
    }
    
    class SendButtonListener implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            try{
                writer.println(outgoing.getText());
                writer.flush();
                
            }catch(Exception ex){
                ex.printStackTrace();
            }
            
            outgoing.setText("");
            outgoing.requestFocus();
        }
        
    }
    
    class IncomingReader implements Runnable{
 
        @Override
        public void run() {
            String message;
            try{
                
                while((message = reader.readLine()) != null){
                    /*
                     * поток вхожит в цикл, пока ответ сервера не будет ровняться нулю
                     */
                    System.out.println("Пришло сообщение "+message);
                    incoming.append(message+"\n");
                }
                
            }catch(Exception ec){
                ec.printStackTrace();
            }
            
        }
        
    }
}
код для мобильного клиента:
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
public class MainActivity extends ActionBarActivity {
    
    EditText tvField;
    ListView lView;
    Socket sock;
    BufferedReader reader;
    PrintWriter writer;
    ArrayList<String> messange = new ArrayList<String>();
    ArrayAdapter<String>adapter;
    
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
 
        lView = (ListView)findViewById(R.id.list_view);
        tvField = (EditText)findViewById(R.id.editText1);
        
        setUpNetworking();
        
        /*поток отвечает за прием сообщений от сервера*/
        Thread readThread = new Thread(new IncomingReader());
        readThread.start();
        
        //создаем массив для хранения строк
        messange = new ArrayList<String>();
 
        
        //создаем адаптер, чтобы привязать ListView к массиву объектов
        
      
        adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, messange);
        
        //привязываем ListView к адаптеру
        lView.setAdapter(adapter);
        
        //прослушиваем нажатия клавиш (по нажатию клавиши enter добавляем в ListView)
        tvField.setOnKeyListener(new OnKeyListener(){
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN)
                    if (keyCode == KeyEvent.KEYCODE_ENTER) {
                        // по нажатию enter отправляем данные на сервер
                        try{
                        writer.println(tvField.getText());
                        writer.flush();
                        
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                        
                         tvField.setText("");
                         
                        /*
                         messange.add(0, tvField.getText().toString());
                        adapter.notifyDataSetChanged();
                        tvField.setText("");
                        */
                        return true;
                    }
                return false;
            }
        });
    }
        
        public void setUpNetworking(){
   /*
    * метод устанавливает соединение с сервером
    */
            try{
                sock = new Socket("192.168.0.101", 5000);
                InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
                reader = new BufferedReader(streamReader);
                writer = new PrintWriter(sock.getOutputStream());
                Toast t = Toast.makeText(getApplicationContext(), "Соединение установлено....", Toast.LENGTH_SHORT);
                t.show();
                //System.out.println("Соединение установленно...");
            }catch(Exception e){
                Toast to = Toast.makeText(getApplicationContext(), "Ошибка подключения", Toast.LENGTH_SHORT);
                to.show();
                e.printStackTrace();
            }
            
    }
    
    class IncomingReader implements Runnable{
 
        @Override
        public void run() {
            String message;
            try{
                
                while((message = reader.readLine()) != null){
                    /*
                     * поток входит в цикл, пока ответ сервера не будет ровняться нулю
                     */
                     messange.add(message);
                        adapter.notifyDataSetChanged();
                }
                
            }catch(Exception ec){
                ec.printStackTrace();
            }
            
        }
        
    }
 }
буду очень благодарен за помощь)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru