android - 如何在线程内用 Toasts 替换 system.out

标签 android

<分区>

如何在线程中添加 toast 方法。我想通过将 system.out 替换为 toast 方法来将结果显示到显示器来进行调试。

我知道在线程中使用应用程序上下文,就像这样: Toast.makeText(getApplicationContext(), "help", Toast.LENGTH_LONG).show(); 不管用。

我不知道如何将 Runnable 与 Toast 调用一起使用并从 Thread 调用 runOnUiThread(runnable)

谁能帮帮我。

public class NetworkServer extends Thread
{

   DatagramSocket mSocket = null;   
   boolean isFinish = false;

   private SimplestPossibleActivity activity;

   public NetworkServer(SimplestPossibleActivity activity)
   {
    this.activity = activity;
   }

   public void run() 
   {

      try 
      {

        Log.d("UDP", "Listening");
        mSocket = new DatagramSocket( 2010); //4444
        mSocket.setBroadcast(true);

        while (!isFinish) 
        {

           Log.d("UDP", "C: socket create success");
           byte[] recvbuffer = new byte[12];
           DatagramPacket packet = new DatagramPacket(recvbuffer,recvbuffer.length);
           Log.d("UDP", "receiving...");
           mSocket.receive(packet);
           Log.d("UDP", "received packet");

           ByteBuffer bb = ByteBuffer.allocate(recvbuffer.length).order(ByteOrder.LITTLE_ENDIAN);
           bb.put(recvbuffer);
           bb.rewind();
           //System.out.println(bb.getFloat());
           //System.out.println(bb.getFloat());
           //System.out.println(bb.getFloat());


           Bundle data = new Bundle();
           data.putFloat("latitude",  bb.getFloat());
           data.putFloat("longitude", bb.getFloat());
           data.putFloat("altitude",  bb.getFloat());

           Message msgHandle = new Message();
           msgHandle.setData(data);
           mhandler.sendMessage(msgHandle);

       } //end while
     } catch (Exception e) {
        Log.e("UDP", "C: Error", e);
     }

   }

   private Handler mhandler = new Handler() 
   {

        @Override
        public void handleMessage(Message msg) 
        {

           Bundle data = msg.getData();
           Log.d("NetworkServer","adding position" + "lat = " + data.getFloat("latitude") +
                                 "lon = " + data.getFloat("longitude") + 
                                 "alt = " + data.getFloat("altitude"));
           activity.addPosition(data.getFloat("latitude"), 
                               data.getFloat("longitude"), 
                               data.getFloat("altitude"));

    }

   };
}

最佳答案

使用库 Xdroid :

dependencies {
    compile 'com.shamanland:xdroid-toaster:0.2.4'
}

有很好的方法:

  1. Context 变量不是必需的。
  2. runOnUiThread() 不是必需的。

只需调用单一方法!

// using the resource string
Toaster.toast(R.string.my_msg);
// or hard-coded string
Toaster.toast("Hello Xdroid!");

这里有更多例子:https://github.com/shamanland/xdroid-toaster-example

关于android - 如何在线程内用 Toasts 替换 system.out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280012/

相关文章:

android - index.android.bundle 是 android 版本发布所必需的吗?

android - 更改屏幕方向后 TextView 内容丢失

android - 领英通讯失败

java - 即使应用程序处于后台,也会循环执行代码 fragment ?

android - 在对话框中使用 ViewPager 的最佳做法是什么

javascript - 为什么 clean 命令在 Gradle React native 项目中不起作用?

c# - Kindle Fire 视频流式传输崩溃

java - LibgdxcomputeGlyphAdvancesAndPositions 不存在

android - 从 Amazon Appstore 下载的应用未显示 Admob 广告

安卓模拟器和彩信