2013-04-26 95 views
-1

我想實現在連接處理類顯示使用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

回答

1

只能在活動或服務中獲取可運行的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

0

見的解釋here

也許你應該通過使用構造或東西的活動範圍內,但你不能使用ApplicationContext以敬酒。

0

我認爲你的getApplicationContext()方法可能返回NULL。我認爲這是因爲你正在從一個線程運行敬酒,這將脫離UI線程。

您將需要從具有UI上下文的應用程序中的某處調用此方法(這意味着某處系統可以獲得UI線程的句柄 - 或需要顯示Toast的地方)。

嘗試創建敬酒之前得到的應用程序上下文(可能使用此語法):

Context ctx =getApplicationContext(); 

然後,確保它是不是要顯示你的麪包前NULL。

如果它實際上是NULL,則需要通過上下文(使用該方法的地方你有背景,並把它傳遞到您的線程作爲參數)

0

使用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

0

首先檢查你做了正確的導入(我認爲它是導入android.widget.Toast;或者你可以使用導入android.widget。*;肯定)。然後嘗試使用此代替getApplicationContext()或activityname.this。

+0

我添加了導入android.widget.Toast,但是當我使用server.this時,它也被加下劃線 – chajka 2013-04-26 13:31:49

0

試試這個。

上下文上下文; 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();