2016-10-09 12 views
0

Ich schreibe eine Android-App in C#, die mit einem Server kommunizieren.C# Android Zugriff Textansicht von einer anderen Klasse

// 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(); 
... 

Beim Start sollte auf dem TextView eine Massge angezeigt werden.

Das Problem ist, ich habe keine Ahnung, wie man den TextView. Ich fand this, aber ich weiß nicht, wie sollte ich es in meinem Fall verwenden

Antwort

0

Machen Sie einfach WebsocketClient eine Eigenschaft es anstelle einer Variablenklasse und dann können Sie es von Ihnen Aktivität zugreifen.

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

Ich weiß nicht, welche Bibliothek WebSocket Sie verwenden. Ich benutze websocket-sharp. Es ist ein Beispiel:

 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; 
      }; 
      .......... 
     } 

Es ist Arbeit. Ich sehe eine Fehlermeldung in meinem TextView.

Wenn Sie Fehler erhalten, versuchen Verwendung RunOnUiThread.Example:

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

Hope this Hilfe.

Verwandte Themen