2016-10-09 9 views
0

私はアンドロイドアプリをC#で書いています。これはサーバーと通信します。c#アンドロイドアクセス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"; 
       });   
    } 

・ホープこのヘルプ。

関連する問題