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

Ответить
iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

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

Сообщение iandryxa » 19 дек 2014, 15:08

Всем привет, в ходе разработки возникла такая проблема:
есть приложение отправляющее введенные строки на сервер(написан на java, находится на моем компе), так при тестировании на эмуляторе и телефоне подключенном к wifi все работает нормально, однако при подключении через 3G после отправки вылетает, то есть по нажатию кнопки "Отправить" крашится, в чем может быть проблема, логи в данный момент посмотреть не могу, так как данная проблема только на реальных устройствах, а ADB мой тел не видит и логи не показывает.
P.S. может быть проблема в манифесте?
для работы с сетью установил разрешение

Код: Выделить всё

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Код приложения

Код: Выделить всё

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, "Сообщение не отправлено метод выдал исключение");
				}
		}
    	
    };
Или может проблема в обработчике кнопки (ее код отдельно от остального кода)

Код: Выделить всё

 	
		@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("");
		}

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

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

Сообщение razmus » 19 дек 2014, 15:17

Есть такая программка PdaNet, мой телефон подружила

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

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

Сообщение iandryxa » 19 дек 2014, 16:46

Спасибо, погуглю ;)

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 19 дек 2014, 17:16

Ставь дрова нормальные, чтобы адб видел.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

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

Сообщение iandryxa » 20 дек 2014, 12:52

Дрова я так понимаю на сайте производителя искать?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 21 дек 2014, 15:08

можно поставить универсальный драйвер, если нет оригинального.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

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

Сообщение iandryxa » 22 дек 2014, 22:33

Всем спасибо за отклик)
Все таки я смог получить логи:

Код: Выделить всё

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)

Код: Выделить всё

@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();
                }
        }

Ответить