2016-10-09 3 views
0

Я пишу приложение для Android в C#, которое связывается с сервером.C# android access textview из другого класса

// Set our view from the "main" layout resource 
SetContentView (Resource.Layout.Main); 
Button button = FindViewById<Button>(Resource.Id.button1); 
TextView txt = FindViewById<TextView>(Resource.Id.textView1); 

Client client = new Client(); 
client.Setup("ws://192.168.0.14:8001", "basic", WebSocketVersion.Rfc6455); 
client.Start(); 
... 

При запуске он должен отображать массу в TextView.

class Client : Activity{ 
    private WebSocket websocketClient; 
    ... 
    public void Setup(string url, string protocol, WebSocketVersion version) 
    { 
    ... 
    websocketClient.Opened += new EventHandler(websocketClient_Opened); 
    } 

    private void websocketClient_Opened(object sender, EventArgs e){ 
     txt.Text = ("Client successfully connected."); // this line is wrong 
     websocketClient.Send("Hello World!"); 
    } 
} 

Проблема в том, что я понятия не имею, как получить доступ к TextView. Я нашел this, но я не знаю, как его использовать в моем случае.

ответ

0

Просто создайте свойство WebsocketClient как свойство вместо переменной класса, а затем вы можете получить к нему доступ из вашей активности.

public class MainActivity : Activity 
{ 
    private TextView txt; 
    private Client client; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     txt = FindViewById<TextView>(Resource.Id.textView1); 

     client = new Client(); 
     client.WebsocketClient.Opened += websocketClient_Opened; 
     client.Setup("ws://192.168.0.14:8001", "basic", WebSocketVersion.Rfc6455); 
     client.Start(); 
    } 

    protected override void OnDestroy() 
    { 
     client.WebsocketClient.Opened -= websocketClient_Opened; 
     base.OnDestroy(); 
    } 

    private void websocketClient_Opened(object sender, EventArgs e) 
    { 
     txt.Text = ("Client successfully connected."); 
     // maybe have to be wrapped in a RunOnUiThread(() =>{ ... }); 
    } 
} 

class Client 
{ 
    public WebSocket WebsocketClient { get; set; } 

    public void Setup(string url, string protocol, WebSocketVersion version) 
    { 
     // WebsocketClient = new ... 
     WebsocketClient.Opened += websocketClient_Opened; 
    } 

    private void websocketClient_Opened(object sender, EventArgs e) 
    { 
     WebsocketClient.Send("Hello World!"); 
    } 
} 
0

Я не знаю, какую библиотеку WebSocket вы используете. Я использую websocket-sharp. Это пример использования:

 protected override void OnCreate(Bundle bundle) 
     { 
     TextView txt = FindViewById<TextView>(Resource.Id.My); 

     using (var ws = new WebSocket("ws://dragonsnest.far/Laputa")) 
     { 
      ws.OnError += (sender, e) => 
      { 
       txt.Text = e.Message; 
      }; 
      .......... 
     } 

Это работа. Я вижу сообщение об ошибке в своем TextView.

Если вы получаете сообщение об ошибке, попробуйте использовать RunOnUiThread.Example:

private void websocketClient_Opened(object sender, EventArgs e) 
    { 
     this.RunOnUiThread(() => 
       { 
        txt.Text = "your message"; 
       });   
    } 

Надежда эта помощь.

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