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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет, в ходе разработки возникла такая проблема:
есть приложение отправляющее введенные строки на сервер(написан на 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2014, 15:10
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 16 секунд
попробую тогда все же подружить тел с ADB
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
22.12.2014, 22:35  [ТС] 5
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
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
22.12.2014, 22:47 6
очевидно, что reader = null. В коде из 1го поста инициализации reader'а не видно.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
22.12.2014, 23:30  [ТС] 7
так ведь при подключении к серверу инициализируется
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
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
23.12.2014, 09:35 8
Ну а что там в MainActivity.java:253?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
23.12.2014, 10:19 9
Цитата Сообщение от 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  [ТС] 10
да вот именно туда и ссылаются логи.
если reader = null, то либо sock кривой, либо streamReader.
А как это исправить? просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка :/
0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
23.12.2014, 14:50 11
Лучший ответ Сообщение было отмечено 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  [ТС] 12
androbro, то есть необходимо иначе выполнять подключение к серверу?
P.S. пардон если туплю, я только учусь)
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
23.12.2014, 15:24 13
Цитата Сообщение от androbro Посмотреть сообщение
если Вы в одной локальной сети с сервером.
точно

Цитата Сообщение от iandryxa5 Посмотреть сообщение
то есть необходимо иначе выполнять подключение к серверу?
если на компе, где запущен сервер, белый IP, то прописывать нужно его, если серый, то недостучаться.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 16:02  [ТС] 14
Kastaneda, воу, а как отличить белый от серого? если не трудно можете инфы поднакинуть по данной теме)
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
23.12.2014, 16:19 15
Это оооочень легко гуглится. В гугл "белый серый ip отличия".
Раз ты не знаешь что это, то думаю у тебя все же серый IP. Белые отдельно оплачиваются (у меня провайдер 50р. в месяц берет вроде) и большинству пользователей они не нужны.
0
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 18:13  [ТС] 16
Kastaneda, понятно, спасибо большое за помощь)
0
23.12.2014, 18:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 18:13
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru