2010-12-30 4 views
0

Проект, над которым я работаю, нуждается в таком типе поведения. Пользователю будет представлен пользовательский интерфейс, который даст им возможность подключиться и отключиться от сервера. Я также хотел бы, чтобы этот пользовательский интерфейс отображал статус подключения, «подключен или отключен». Всякий раз, когда пользователь нажимает на соединение, приложение запускает поток, который обрабатывает соединение с сервером. Пользователь по-прежнему будет смотреть на основной интерфейс. Когда они запускают это соединение, и пока соединение остается, я хотел бы, чтобы состояние соединения было «подключено». Если соединение когда-либо сломалось в любой момент, я бы хотел, чтобы он отображался отключенным. Ниже перечислено то, что у меня есть.Android Вопрос по теме и классу

Мой вопрос ... Я делаю резьбу справа? Так что телефон не будет раздавлен соединением сервера, пока он подключен?

Кроме того, как я могу получить главный пользовательский интерфейс, чтобы отображать состояние соединения сервера и отображать, когда соединение нарушено?

Заранее благодарен! Если у вас есть дополнительные вопросы, пожалуйста, дайте мне знать.

The server connection thread. 

public class ConnectDevice implements Runnable { 

    private boolean connected; 
    private ObjectInputStream ois; 

    public void run() { 
     try { 
      InetAddress host = InetAddress.getByName("192.168.234.1"); 
      Socket socket = new Socket(host.getHostName(), 7777); 
      connected = true; 


      while (connected) { 
       try { 
        ois = new ObjectInputStream(socket.getInputStream()); 
        String message = (String) ois.readObject(); 
        System.out.println("Message: " + message); 
       } 
       catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      ois.close(); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
      connected = false; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      connected = false; 
     } /*catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      connected = false; 
     }*/ 
    } 
} 



The main UI and main class. 

public class SmartApp extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.intro); 

     final Button firstTimeButton = (Button) findViewById(R.id.firstTimeButton); 
     firstTimeButton.setOnClickListener(
     new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       // TODO Auto-generated method stub 
       Intent userCreationIntent = new Intent(v.getContext(), UserCreation.class); 
       startActivityForResult(userCreationIntent, 0); 
      } 
     }); 

     final Button connectDeviceButton = (Button) findViewById(R.id.connectDeviceButton); 
     connectDeviceButton.setOnClickListener(
     new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Intent connectDeviceIntent = new Intent(v.getContext(), ConnectDevice.class); 
       //startActivityForResult(connectDeviceIntent, 0); 

       Thread cThread = new Thread(new ConnectDevice()); 
       cThread.start(); 
      } 
     }); 
    } 
} 
+1

wow im делать то же самое, я сообщу, если это сработает завтра – Reno

+0

Любая помощь с благодарностью. благодаря – prolink007

ответ

1

Android имеет поток пользовательского интерфейса, который является единственным потоком, которому разрешено обновлять элементы пользовательского интерфейса.

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

После того, как рабочий рабочий поток завершит работу и обновит элемент пользовательского интерфейса, сделанный findViewById, он автоматически изменится на экране, если вам не придется ничего делать.

1

Отъезд AsyncTask, это специально сделано для такого рода вещи.

Смежные вопросы