Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173

Ошибка при работе с сетью

19.12.2014, 15:10. Показов 2172. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, в ходе разработки возникла такая проблема:
есть приложение отправляющее введенные строки на сервер(написан на java, находится на моем компе), так при тестировании на эмуляторе и телефоне подключенном к wifi все работает нормально, однако при подключении через 3G после отправки вылетает, то есть по нажатию кнопки "Отправить" крашится, в чем может быть проблема, логи в данный момент посмотреть не могу, так как данная проблема только на реальных устройствах, а ADB мой тел не видит и логи не показывает.
P.S. может быть проблема в манифесте?
для работы с сетью установил разрешение
Java
1
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Код приложения
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
public class MainActivity extends ActionBarActivity { 
     
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
         
        int id = item.getItemId(); 
         
        switch(id){ 
         
        case R.id.item_how: 
             
            Intent i = new Intent(MainActivity.this, About.class); 
            startActivity(i); 
            return true; 
             
        case R.id.item_share: 
             
            Intent intent = new Intent(MainActivity.this, Share.class); 
            startActivity(intent); 
            return true; 
             
            default: 
                return super.onOptionsItemSelected(item); 
        } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        getMenuInflater().inflate(R.menu.main, menu); 
        return true; 
    } 
 
    String title; 
    String content; 
    String value; 
    String title_content; 
     
    String titleInput; 
    String contentInput; 
     
    BufferedReader reader; 
    PrintWriter writer; 
    Socket sock; 
     
    Button btnSend; 
    EditText mEditText; 
    ListView lvMessage; 
     
    String messageInput, messageOutput; 
    ArrayList<String> messages; 
    ArrayList<String>contents = new ArrayList<String>(); //используется для хранении информации по каждому пункту списка 
    ArrayAdapter<String>adapter; 
     
    private static final String TAG = "myLog"; 
     
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
         
        messages = new ArrayList<String>(); 
        lvMessage = (ListView)findViewById(R.id.lvMessage); 
        lvMessage.setOnItemClickListener(new  OnItemClickListener(){ 
 
            @Override 
            public void onItemClick(AdapterView<?> parent, View view, 
                    final int position, long id) { 
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
                builder.setTitle("Сообщение") 
                .setMessage(contents.get(position)); 
                //кнопка закрытия окна просмотра сообщения 
                builder.setPositiveButton("ОК", new DialogInterface.OnClickListener(){ 
                     
                    @Override 
                    public void onClick(DialogInterface dialog, int which) { 
                        dialog.cancel();     
                    } 
                }); 
                 
                //кнопка ответа в сообщении 
                builder.setNegativeButton("Ответить", new DialogInterface.OnClickListener() { 
                     
                    @Override 
                    public void onClick(DialogInterface dialog, int which) { 
                        final String reply = "Ответ в теме: "+messages.get(position);  
                        /* 
                         * запускаем создание диалогового окна для ответного сообщения 
                         */ 
                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
                        builder.setTitle(reply); 
                        final EditText input = new EditText(MainActivity.this); 
                        builder.setView(input); 
                        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
                            public void onClick(DialogInterface dialog, int whichButton) { 
                             title = reply; 
                             content = input.getText().toString(); 
                             dialog.cancel(); 
                             Thread thread = new Thread(new Runnable(){ 
                                    //указываем какие потоки запускать 
                                    @Override 
                                    public void run() { 
                                        try{ 
                                            runOnUiThread(send); 
                                        }catch(Exception e){ 
                                            e.printStackTrace(); 
                                        } 
                                }  
                             }); 
                             thread.start(); 
                              } 
                            }); 
                        AlertDialog alert = builder.create(); 
                        alert.show(); 
                    } 
                }); 
                 
                AlertDialog alert = builder.create(); 
                alert.show(); 
                Log.e(TAG, "id пункта списка "+position); 
            } 
             
        }); 
        adapter = new ArrayAdapter<String>(this, 
                android.R.layout.simple_list_item_1, messages); 
        lvMessage.setAdapter(adapter); 
        mEditText = (EditText)findViewById(R.id.editText1); 
        btnSend = (Button)findViewById(R.id.button1); 
         
        new NetWork().execute(); 
         
        btnSend.setOnClickListener(new OnClickListener(){  
             
        @Override 
        public void onClick(View v) { 
        content = mEditText.getText().toString(); 
         
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
        builder.setTitle("Введите тему сообщения"); 
        final EditText input = new EditText(MainActivity.this); 
        builder.setView(input); 
         
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int whichButton) { 
             title = input.getText().toString(); 
             dialog.cancel(); 
             Thread thread = new Thread(new Runnable(){ 
                    //указываем какие потоки запускать 
                    @Override 
                    public void run() { 
                        try{ 
                            runOnUiThread(send); 
                        }catch(Exception e){ 
                            e.printStackTrace(); 
                        } 
                }  
             }); 
             thread.start(); 
              } 
            }); 
        AlertDialog alert = builder.create(); 
        alert.show(); 
 
         new OutputReaderThread().start(); 
        mEditText.setText(""); 
        } 
      }); 
    } 
     
    Runnable send = new Runnable(){ 
         
        @Override 
        public void run() { 
            title_content = content + " / "+title; 
            try{ 
                writer.println(title_content); 
                writer.flush(); 
                Log.e(TAG, "Сообщение отправленно"); 
                }catch(Exception e){ 
                    e.printStackTrace(); 
                    Log.e(TAG, "Сообщение не отправлено метод выдал исключение"); 
                } 
        } 
         
    };
Или может проблема в обработчике кнопки (ее код отдельно от остального кода)
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
 @Override 
        public void onClick(View v) { 
        content = mEditText.getText().toString(); 
         
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
        builder.setTitle("Введите тему сообщения"); 
        final EditText input = new EditText(MainActivity.this); 
        builder.setView(input); 
         
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int whichButton) { 
             title = input.getText().toString(); 
             dialog.cancel(); 
             Thread thread = new Thread(new Runnable(){ 
                    //указываем какие потоки запускать 
                    @Override 
                    public void run() { 
                        try{ 
                            runOnUiThread(send); 
                        }catch(Exception e){ 
                            e.printStackTrace(); 
                        } 
                }  
             }); 
             thread.start(); 
              } 
            }); 
        AlertDialog alert = builder.create(); 
        alert.show(); 
 
         new OutputReaderThread().start(); 
        mEditText.setText(""); 
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2014, 15:10
Ответы с готовыми решениями:

Ошибка при работе с сетью
Нужна помощь в поиске ошибки. При запуске приложение сразу закрывается. Код MainActivity package com.example.nestro.dut_rozklad; ...

Вопрос по безопасности кода в многопоточном приложении при работе с сетью
Есть следующий код: DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); ...

Аппаратная ошибка видео (Ошибка при работе с видеоустройствами привела к некорректной работе Windows).
Аппаратная ошибка видео. Последнее время во время игры Call of Duty: Modern Warfare 2 в мультиплеер, (между сменами карт, как только...

15
6 / 6 / 0
Регистрация: 25.02.2012
Сообщений: 55
19.12.2014, 15:20
а если попробовать добавить еще вот это
Java
1
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
19.12.2014, 16:34
iandryxa5, нужны логи обязательно
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
19.12.2014, 16:43  [ТС]
xaxol_xaxol, пробовал не помогло :/

Добавлено через 16 секунд
попробую тогда все же подружить тел с ADB
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
22.12.2014, 22:35  [ТС]
YuraAAA,
Всем спасибо за отклик)
Все таки я смог получить логи:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
12-22 18:15:03.098: E/AndroidRuntime(390): FATAL EXCEPTION: Thread-11 
12-22 18:15:03.098: E/AndroidRuntime(390): java.lang.NullPointerException 
12-22 18:15:03.098: E/AndroidRuntime(390):     at com.exam1ple.handler.MainActivity$OutputReaderThread.run(MainActivity.java:253) 
12-22 18:15:04.068: E/WindowManager(390): Activity com.exam1ple.handler.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4054cfd8 that was originally added here 
12-22 18:15:04.068: E/WindowManager(390): android.view.WindowLeaked: Activity com.exam1ple.handler.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4054cfd8 that was originally added here 
12-22 18:15:04.068: E/WindowManager(390):     at android.view.ViewRoot.<init>(ViewRoot.java:258) 
12-22 18:15:04.068: E/WindowManager(390):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
12-22 18:15:04.068: E/WindowManager(390):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
12-22 18:15:04.068: E/WindowManager(390):     at android.view.Window$LocalWindowManager.addView(Window.java:424) 
12-22 18:15:04.068: E/WindowManager(390):     at android.app.Dialog.show(Dialog.java:241) 
12-22 18:15:04.068: E/WindowManager(390):     at com.exam1ple.handler.MainActivity$3.onClick(MainActivity.java:198) 
12-22 18:15:04.068: E/WindowManager(390):     at android.view.View.performClick(View.java:2485) 
12-22 18:15:04.068: E/WindowManager(390):     at android.view.View$PerformClick.run(View.java:9080) 
12-22 18:15:04.068: E/WindowManager(390):     at android.os.Handler.handleCallback(Handler.java:587) 
12-22 18:15:04.068: E/WindowManager(390):     at android.os.Handler.dispatchMessage(Handler.java:92) 
12-22 18:15:04.068: E/WindowManager(390):     at android.os.Looper.loop(Looper.java:123) 
12-22 18:15:04.068: E/WindowManager(390):     at android.app.ActivityThread.main(ActivityThread.java:3683) 
12-22 18:15:04.068: E/WindowManager(390):     at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 18:15:04.068: E/WindowManager(390):     at java.lang.reflect.Method.invoke(Method.java:507) 
12-22 18:15:04.068: E/WindowManager(390):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
12-22 18:15:04.068: E/WindowManager(390):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
12-22 18:15:04.068: E/WindowManager(390):     at dalvik.system.NativeStart.main(Native Method)
причем ссылаются они на поток(а именно на условие цикла while)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override 
        public void run() { 
                String messageOutput = null; 
                try { 
                    while(!isInterrupted() && (messageOutput = reader.readLine()) != null){ 
                        int a = messageOutput.indexOf("/"); 
                        contentInput = messageOutput.substring(0,a); 
                        titleInput = messageOutput.substring(a + 1,messageOutput.length()); 
                        Log.e(TAG, "Получены сообщения "+titleInput + ";"+contentInput); 
                        messages.add(0, titleInput);  
                        contents.add(0,contentInput); 
                        runOnUiThread(mListNotifier); 
                        addSQl(); 
                    } 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
        }
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.12.2014, 22:47
очевидно, что reader = null. В коде из 1го поста инициализации reader'а не видно.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
22.12.2014, 23:30  [ТС]
так ведь при подключении к серверу инициализируется
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class NetWork extends AsyncTask{
 
        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
        }
 
        @Override
        protected Object doInBackground(Object... params) {
            try {
                sock = new Socket("192.168.0.104", 5050);
                InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
                reader = new BufferedReader(streamReader);
                writer = new PrintWriter(sock.getOutputStream());
                Log.e(TAG, "Подключение выполнено");
            } catch (Exception e) {
                e.printStackTrace();
                Log.e(TAG, "подключение провалилось!");
            }
            return null;
        }
        
    }
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
23.12.2014, 09:35
Ну а что там в MainActivity.java:253?
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.12.2014, 10:19
Цитата Сообщение от Rube Посмотреть сообщение
Ну а что там в MainActivity.java:253?
похоже вот это
Java
1
while(!isInterrupted() && (messageOutput = reader.readLine()) != null){
тут может упасть только если reader = null.
iandryxa5, нужно в отладчике посмотреть, что вот здесь происходит
Java
1
2
3
                sock = new Socket("192.168.0.104", 5050);
                InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
                reader = new BufferedReader(streamReader);
если reader = null, то либо sock кривой, либо streamReader.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 14:37  [ТС]
да вот именно туда и ссылаются логи.
если reader = null, то либо sock кривой, либо streamReader.
А как это исправить? просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка :/
0
400 / 343 / 85
Регистрация: 17.10.2014
Сообщений: 1,015
23.12.2014, 14:50
Лучший ответ Сообщение было отмечено Kastaneda как решение

Решение

iandryxa5,
Цитата Сообщение от iandryxa5 Посмотреть сообщение
просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка
конечно все нормально будет, если Вы в одной локальной сети с сервером.
Цитата Сообщение от iandryxa5 Посмотреть сообщение
sock = new Socket("192.168.0.104", 5050);
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 14:57  [ТС]
androbro, то есть необходимо иначе выполнять подключение к серверу?
P.S. пардон если туплю, я только учусь)
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.12.2014, 15:24
Цитата Сообщение от androbro Посмотреть сообщение
если Вы в одной локальной сети с сервером.
точно

Цитата Сообщение от iandryxa5 Посмотреть сообщение
то есть необходимо иначе выполнять подключение к серверу?
если на компе, где запущен сервер, белый IP, то прописывать нужно его, если серый, то недостучаться.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 16:02  [ТС]
Kastaneda, воу, а как отличить белый от серого? если не трудно можете инфы поднакинуть по данной теме)
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.12.2014, 16:19
Это оооочень легко гуглится. В гугл "белый серый ip отличия".
Раз ты не знаешь что это, то думаю у тебя все же серый IP. Белые отдельно оплачиваются (у меня провайдер 50р. в месяц берет вроде) и большинству пользователей они не нужны.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 18:13  [ТС]
Kastaneda, понятно, спасибо большое за помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2014, 18:13
Помогаю со студенческими работами здесь

Ошибка при установке системы управления сетью
Эксперты СyberForum помогите пожалуйста! Мне послезавтра нужно сдать курсовой проект (теоретическая часть готова) а практики нету.В том...

Неполадки с сетью, при запуске server 2003 ошибка
Всем привет. Надеюсь на Вашу помощь. Вся работа стоит. Сам не очень разбираюсь в администрировании, только учусь. Есть сеть, сервер...

Книги по работе с сетью
Подскажите, пожалуйста, какие-нибудь книги или статьи по Delphi где рассматривается сеть. Желательно, конечно, книги, т. к. книги дают...

Книги по работе с сетью на C++
Хотел начать работать с сетями на C++, но попытки найти хорошие и подробные гайды в различных поисковиках не дали результатов(не отрицаю,...

Исходник по работе с сетью
Доброго времени суток, друзья! Ищу исходники по работе с сетью (передача файлов и сообщений) между клиентом и сервером-приложением....


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru