显示使用Android的敬酒

问题描述:

我想实现在连接处理类显示使用Android的敬酒

public class server implements Runnable { 
private static final String TAG = "myLogs"; 
..... 
public void run() 
{ 
..... 
while (true) { 
    try { 

     client = server.accept(); 
     // here i want to show message, when client is connected 
     Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT).show(); 
      Log.d(TAG, "client connected...."); 

烤面包,但我对makeText和getApplicationContext()得到错误信息; 他们强调..

+0

从您的通话活动传递通过构造背景和使用,而不是getApplicationContext – 2013-04-26 13:10:13

只能在活动或服务中获取可运行的getApplicationContext()。 要在可运行的应用程序中获取应用程序上下文,您应该将活动的上下文传递给可运行的应用程序。

但在你的情况下,你想要在活动上下文中显示敬酒。为了做到这一点,传递活动对象并调用runOnUIThread方法。给你的活动为背景的吐司:

public class Server implements Runnable { 
private static final String TAG = "myLogs"; 
private Activity myActivity; 

    public Server(final Activity activity) { 
    this.myActivity = activity; 
    } 

..... 
public void run() 
{ 
..... 
while (true) { 
    try { 

     client = server.accept(); 
     // here i want to show message, when client is connected 
     myActivity.runOnUiThread(new Runnable() { 
      public void run() { 
      Toast.makeText(myActivity, "msg msg", Toast.LENGTH_SHORT).show(); 
      Log.d(TAG, "client connected....");  
      } 
     }); 

这也说明如下: Android: Toast in a thread

+0

我试过这个变种,我没有错误,但是我没有在我的手机上得到任何祝酒信息,我的应用程序崩溃了,执行其他函数的相同问题,如thread.stop(),finish()应用程序,哪里可以有问题?我不知道 – chajka 2013-04-26 15:06:59

+0

我没有完全回答你的问题抱歉,只有部分获得应用程序上下文。我纠正它显示从一个线程吐司或在一个活动上运行。 – 2013-05-02 15:06:12

见的解释here

也许你应该通过使用构造或东西的活动范围内,但你不能使用ApplicationContext以敬酒。

我认为你的getApplicationContext()方法可能返回NULL。我认为这是因为你正在从一个线程运行敬酒,这将脱离UI线程。

您将需要从具有UI上下文的应用程序中的某处调用此方法(这意味着某处系统可以获得UI线程的句柄 - 或需要显示Toast的地方)。

尝试创建敬酒之前得到的应用程序上下文(可能使用此语法):

Context ctx =getApplicationContext(); 

然后,确保它是不是要显示你的面包前NULL。

如果它实际上是NULL,则需要通过上下文(使用该方法的地方你有背景,并把它传递到您的线程作为参数)

使用classname.this它肯定工作

+0

现在,我得到makeText下划线。 Toast.makeText(server.this,“msg msg”,Toast.LENGTH_SHORT).show(); – chajka 2013-04-26 13:33:20

+0

@chajka如果它为你工作,不要忘记标记为答案,并upvote它..... – Supreet 2013-04-26 13:35:43

+0

它不会工作,服务器类与任何活动无关,它没有活动上下文 – Analizer 2013-04-26 14:01:09

首先检查你做了正确的导入(我认为它是导入android.widget.Toast;或者你可以使用导入android.widget。*;肯定)。然后尝试使用此代替getApplicationContext()或activityname.this。

+0

我添加了导入android.widget.Toast,但是当我使用server.this时,它也被加下划线 – chajka 2013-04-26 13:31:49

试试这个。

上下文上下文; context = this;

Toast.makeText(context,“msg msg”,Toast.LENGTH_SHORT).show();

Toast.makeText(ClassName.this, “MSG msg” 中,Toast.LENGTH_SHORT).show();

Toast.makeText(this.getApplicationContext(), “MSG msg” 中,Toast.LENGTH_SHORT).show();