Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
1

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

19.12.2014, 15:10. Просмотров 832. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2014, 15:10
Ответы с готовыми решениями:

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

Ошибка при работе с JSON
база на локальном сервере, если переходить по URL в браузере все...

Ошибка при работе с фрагментами
Soory if it's unapproprite here, but I do not know what to do. I have just...

Ошибка при работе Android Studio
Вот такая ошибка выходит после запуска Android Studio 1.3.1 И почему не...

Ошибка при работе с базой данных
скажите почему ошибка при этих строках: sqdb.insert(sms.TABLE_NAME1,...

15
xaxol_xaxol
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
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
19.12.2014, 16:34 3
iandryxa5, нужны логи обязательно
0
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
19.12.2014, 16:43  [ТС] 4
xaxol_xaxol, пробовал не помогло :/

Добавлено через 16 секунд
попробую тогда все же подружить тел с ADB
0
iandryxa5
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
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
22.12.2014, 22:47 6
очевидно, что reader = null. В коде из 1го поста инициализации reader'а не видно.
0
iandryxa5
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
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
23.12.2014, 09:35 8
Ну а что там в MainActivity.java:253?
0
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
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
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 14:37  [ТС] 10
да вот именно туда и ссылаются логи.
если reader = null, то либо sock кривой, либо streamReader.
А как это исправить? просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка :/
0
androbro
344 / 304 / 68
Регистрация: 17.10.2014
Сообщений: 903
23.12.2014, 14:50 11
Лучший ответ Сообщение было отмечено Kastaneda как решение

Решение

iandryxa5,
Цитата Сообщение от iandryxa5 Посмотреть сообщение
просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка
конечно все нормально будет, если Вы в одной локальной сети с сервером.
Цитата Сообщение от iandryxa5 Посмотреть сообщение
sock = new Socket("192.168.0.104", 5050);
0
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 14:57  [ТС] 12
androbro, то есть необходимо иначе выполнять подключение к серверу?
P.S. пардон если туплю, я только учусь)
0
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
23.12.2014, 15:24 13
Цитата Сообщение от androbro Посмотреть сообщение
если Вы в одной локальной сети с сервером.
точно

Цитата Сообщение от iandryxa5 Посмотреть сообщение
то есть необходимо иначе выполнять подключение к серверу?
если на компе, где запущен сервер, белый IP, то прописывать нужно его, если серый, то недостучаться.
0
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 16:02  [ТС] 14
Kastaneda, воу, а как отличить белый от серого? если не трудно можете инфы поднакинуть по данной теме)
0
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 346
Регистрация: 12.12.2009
Сообщений: 7,627
Записей в блоге: 2
Завершенные тесты: 1
23.12.2014, 16:19 15
Это оооочень легко гуглится. В гугл "белый серый ip отличия".
Раз ты не знаешь что это, то думаю у тебя все же серый IP. Белые отдельно оплачиваются (у меня провайдер 50р. в месяц берет вроде) и большинству пользователей они не нужны.
0
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 173
23.12.2014, 18:13  [ТС] 16
Kastaneda, понятно, спасибо большое за помощь)
0
23.12.2014, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2014, 18:13

Ошибка при работе с галереей в android 6
Здравствуйте, мне нужно получить физический путь к файлу из галереи, этот код...

Подскажите где ошибка при работе с БД
Добый день! Пытась сделать что то наподбии справочника. Т.е. занес в БД sqlite...

При работе с IntentService выскакивает ошибка
Почему она выскакивает? Installation failed with message Failed to...


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

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

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