2011-09-29 22 views
0

我已經創建了一個單獨的類來啓動並且意圖爲類,我想從該線程啓動intent並且不從activity繼承,並且不會啓動startActivity。每次啓動應用程序時,我都會得到上下文的空指針異常。無法獲取上下文來啓動intent

public class ToLaunch extends Activity { 
    public void launchScoreloop() { 
     con.getApplicationContext(); 
     startActivity(new Intent(this, LeaderboardsScreenActivity.class)); 
    } 
} 
+0

不能讓你的一切,這是推出一個新的意圖錯誤的方式。 ...請參考一些簡單的Android示例.. –

+0

您可能想要閱讀[this](http://www.vogella.de/articles/AndroidPerformance/article.html) – Audrius

回答

0

如果線程是你的活動中一個內部類可以使用

startActivity(new Intent(YourActivity.this, LeaderboardsScreenActivity.class)); 

    If it is a separate class you can make a constructor that take context has constructor as argument and you can pass your activity context into that constructor 


    Context con; 
    public YourThread(Context context){ 
    con = context; 
    } 
您的活動中

和,同時使線程對象

YourThread thread = new YourThread(this); 
+0

通過上下文不是一個好主意到其他線程,以避免讓你的活動長期存在和泄漏內存。這就是說你最好使用WeakReference <>來保持上下文。 – Audrius

+0

Thanx信息。但是如果我們把上下文作爲一個弱引用並且在線程使用它之前得到垃圾回收會怎麼樣呢?它會使應用程序崩潰,因爲上下文爲空 – anujprashar

+1

最好使用AsynTask來運行修改UI的處理:) – Houcine

1

你正在編寫一個活動,和你沒有覆蓋方法onCreate()

public class ToLaunch extends Activity { 
    @override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    //Call your method here after a button click cor example or something else 
    } 

    public void launchScoreloop() { 
     con.getApplicationContext(); 
     startActivity(new Intent(this, LeaderboardsScreenActivity.class)); 
    } 
} 

指這兩個教程關於使用意圖再掀活動: tuto 1 tuto 2

如果要啓動從另一個類的活動,你應該通過上下文到第二類像這樣:

SecondClass instance = new SecondClass(this); 

和你二等的構造器將是這樣的:

public void SecondClass(Context _context){ 
    this.context = _context; 
} 

,然後你可以使用您傳遞給你的二等這樣的背景下開始的活性起着:

this.context.startActivity(....); 
+0

我可能不應該擴展活動這只是所以我可以使用startActivity()。我所尋找的是一個簡單的方法,就是在沒有上下文傳遞給它的線程中啓動一個intent。 –

+0

@Dave Ward:看我的編輯 – Houcine

相關問題