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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
#1

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

19.12.2014, 15:10. Просмотров 581. Ответов 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(""); 
        }
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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" />
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.12.2014, 16:34     Ошибка при работе с сетью #3
iandryxa5, нужны логи обязательно
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
19.12.2014, 16:43  [ТС]     Ошибка при работе с сетью #4
xaxol_xaxol, пробовал не помогло :/

Добавлено через 16 секунд
попробую тогда все же подружить тел с ADB
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
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(); 
                } 
        }
Kastaneda
Форумчанин
Эксперт С++
4258 / 2790 / 219
Регистрация: 12.12.2009
Сообщений: 7,118
Записей в блоге: 1
Завершенные тесты: 1
22.12.2014, 22:47     Ошибка при работе с сетью #6
очевидно, что reader = null. В коде из 1го поста инициализации reader'а не видно.
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
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;
        }
        
    }
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
23.12.2014, 09:35     Ошибка при работе с сетью #8
Ну а что там в MainActivity.java:253?
Kastaneda
Форумчанин
Эксперт С++
4258 / 2790 / 219
Регистрация: 12.12.2009
Сообщений: 7,118
Записей в блоге: 1
Завершенные тесты: 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.
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
23.12.2014, 14:37  [ТС]     Ошибка при работе с сетью #10
да вот именно туда и ссылаются логи.
если reader = null, то либо sock кривой, либо streamReader.
А как это исправить? просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка :/
androbro
319 / 279 / 55
Регистрация: 17.10.2014
Сообщений: 826
23.12.2014, 14:50     Ошибка при работе с сетью #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
iandryxa5,
Цитата Сообщение от iandryxa5 Посмотреть сообщение
просто когда тел подключен к wifi и комп на котором запущен сервер все нормально работает, однако если попробовать через 3g, либо запустить сервер на другом компе, то возникает такая ошибка
конечно все нормально будет, если Вы в одной локальной сети с сервером.
Цитата Сообщение от iandryxa5 Посмотреть сообщение
sock = new Socket("192.168.0.104", 5050);
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
23.12.2014, 14:57  [ТС]     Ошибка при работе с сетью #12
androbro, то есть необходимо иначе выполнять подключение к серверу?
P.S. пардон если туплю, я только учусь)
Kastaneda
Форумчанин
Эксперт С++
4258 / 2790 / 219
Регистрация: 12.12.2009
Сообщений: 7,118
Записей в блоге: 1
Завершенные тесты: 1
23.12.2014, 15:24     Ошибка при работе с сетью #13
Цитата Сообщение от androbro Посмотреть сообщение
если Вы в одной локальной сети с сервером.
точно

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

Обработка событий при работе с sqlite Android
Быстродействие EditText при работе с html Android
Борьба за TextView при работе с CountDownTimer Android
Потоки при работе с камерой Android
Android Ошибка при работе с фрагментами

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

Или воспользуйтесь поиском по форуму:
iandryxa5
1 / 1 / 0
Регистрация: 22.03.2014
Сообщений: 170
23.12.2014, 18:13  [ТС]     Ошибка при работе с сетью #16
Kastaneda, понятно, спасибо большое за помощь)
Yandex
Объявления
23.12.2014, 18:13     Ошибка при работе с сетью
Ответ Создать тему
Опции темы

Текущее время: 07:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru