1

私は(今まで)ASCIIで成文化されたTCPクライアントからのメッセージのみを受信するTCPリスナーを備えた非常に単純なソフトウェアを作成しています。まだわからないUIで何かをしなければなりませんが、今では、 Samsung Galaxy Tab でこのメッセージを含む AlertDialog を表示しようとしています。

問題は、何らかの理由で setContentView が機能していないと私は信じていることです。AbsoluteLayout を含む .axml (レイアウト) ファイルが 1 つあり、コードでこの AbsoluteLayout を呼び出して、色を変更し、この AbsoluteLayout (色を変更して) を画面に表示しようとしていますが、問題は、通常の黒い画面を参照してください。

コードのデバッグを開始すると、MS VS 2010 の出力にすべての Console.Writeline コマンドが表示され、クライアントから送信されたメッセージも表示されます。しかし、レイアウトと AlertDialog が表示されません。

誰でも私を助けることができますか?前もって感謝します。

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Android.Graphics.Drawables;
using System.Drawing;

namespace Gafisa.Automacao.VideoWall.Listener
{
    [Activity(Label = "Listener", MainLauncher = true, Icon = "@drawable/icon")]
    public class Activity1 : Activity
    {
        protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        AbsoluteLayout abs = FindViewById<AbsoluteLayout>(Resource.Id.abslayout);
        abs.SetBackgroundColor(new Android.Graphics.Color(125,125,125,125));
        //ImageButton btn = new ImageButton(this);
        //var lp = new AbsoluteLayout.LayoutParams(50, 50, 200, 200);
        //btn.LayoutParameters = lp;
        //BitmapDrawable dd = new BitmapDrawable("/mnt/sdcard/1.png");
        //btn.SetBackgroundDrawable(dd);
        //abs.AddView(btn);

        System.Net.Sockets.TcpListener listener = null;
        byte[] rcvBuffer = new byte[40];
        int bytesRcvd;

        try
        {
            listener = new System.Net.Sockets.TcpListener(IPAddress.Any, 13000);
            listener.Start();
            Console.WriteLine("Listener iniciado");
        }
        catch (SocketException se)
        {
            Console.WriteLine("Erro ao iniciar o listener: " + se.Message);
        }

        for (;;)
        {
            TcpClient client = null;
            NetworkStream netStream = null;
            try
            {
                client = listener.AcceptTcpClient();
                netStream = client.GetStream();
                int totalBytesEchoed = 0;
                while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0)
                {
                    netStream.Write(rcvBuffer, 0, bytesRcvd);
                    totalBytesEchoed += bytesRcvd;
                }
                string recebido = System.Text.Encoding.ASCII.GetString(rcvBuffer);
                Console.WriteLine(recebido);

                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.SetMessage(recebido);
                alert.SetTitle("Mensagem Recebida");
                alert.Show();
                Console.WriteLine("echoed {0} bytes.", totalBytesEchoed);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("Erro no LOOP");
            }
            finally
            {
                netStream.Close();
                client.Close();
            }
        }
    }
}

}

4

2 に答える 2

0

このOnCreate関数で無限ループを実行すると、UI フレームワークがレンダリングを終了できなくなります。そのため、表示されるのは黒い画面だけです。

非 UI コードを非同期で (別のスレッドで) 実行することになっています。

于 2012-11-22T06:18:09.563 に答える