2012-06-27 123 views
2

我想在Android開始一個非常簡單的jWebSocket客戶端並連接到我的本地服務器。我使用的JWC類從演示連同jWebSocket 1.0測試版8和Android 4.0.3,我的代碼看起來是這樣的:jWebSocket客戶端沒有連接到本地服務器

import org.jwebsocket.api.WebSocketClientEvent; 
import org.jwebsocket.api.WebSocketClientTokenListener; 
import org.jwebsocket.api.WebSocketPacket; 
import org.jwebsocket.client.token.BaseTokenClient; 
import org.jwebsocket.kit.WebSocketException; 
import org.jwebsocket.token.Token; 

import android.app.Activity; 
import android.content.Context; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 
import cased.smids.communication.JWC; 

public class TasksActivity extends Activity implements WebSocketClientTokenListener { 
    Spinner spinner; 
    Button btn_Start; 

    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.main); 

     JWC.init(); 

     spinner = (Spinner)findViewById(R.id.sp_Task); 
     btn_Start = (Button)findViewById(R.id.btn_Start); 

     ArrayAdapter<CharSequence> adapter = 
       ArrayAdapter.createFromResource(
         this, 
         R.array.Tasks, 
         android.R.layout.simple_spinner_item 
       ); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 

     btn_Start.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View src) { 
       switch (src.getId()) { 
        case R.id.btn_Start: 
         if (spinner.getSelectedItem().toString().equals("Connect")) { 
          try { 
           System.out.println("connecting manually..."); 
           JWC.open(); 
          } catch (WebSocketException e) { 
           e.printStackTrace(); 
          } 
         } 
        default: 
         break; 
       } 
      } 
     }); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     System.out.println("* opening... "); 
     try { 
      JWC.addListener(this); 
      JWC.open(); 
     } catch (WebSocketException ex) { 
      System.out.println("* exception: " + ex.getMessage()); 
     } 
    } 

    @Override 
    protected void onPause() { 
     System.out.println("* closing... "); 
     try { 
      JWC.close(); 
      JWC.removeListener(this); 
     } catch (WebSocketException ex) { 
      System.out.println("* exception: " + ex.getMessage()); 
     } 
     super.onPause(); 
    } 

    public void processClosed(WebSocketClientEvent arg0) { 
     System.out.println("closed"); 
    } 

    public void processOpened(WebSocketClientEvent arg0) { 
     System.out.println("opened"); 
    } 

    public void processOpening(WebSocketClientEvent arg0) { 
     System.out.println("opening"); 
    } 

    public void processPacket(WebSocketClientEvent arg0, WebSocketPacket arg1) { 
     System.out.println("packet"); 
    } 

    public void processReconnecting(WebSocketClientEvent arg0) { 
     System.out.println("reconnecting"); 
    } 

    public void processToken(WebSocketClientEvent arg0, Token arg1) { 
     System.out.println("token"); 
    } 
} 

所以基本上它只是一個微調和一個按鈕。現在,我想要做的就是連接到我的本地jWebSocketServer。該演示應用程序(.apk文件包從網站,如果我輸入的代碼日食告訴我刪除了許多「@Overwrite」它編譯的代碼之前 - 即相同的「錯誤」發生後)我的服務器工程,以便它有成爲代碼。現在我所得到的只是「連接...」,大約在0.1秒後「關閉」。每次。

BTW。該應用程序有合適的互聯網和ACCESS_NETWORK_STATE所以這不應該是一個問題。

我會感謝任何幫助。

乾杯

+0

你寫的,你終於發現了異常,但如何/你在哪裏找到的異常「NetworkOnMainThreadException」?有沒有「隱藏」日誌文件或祕密「調試模式開關」? – user1717811

回答

2

原來,BaseTokenClient.open()被捕獲所有異常,做它沒有(沉默失敗)。在我的情況 - NetworkOnMainThreadException。謎團已揭開。

相關問題