2011-03-17 26 views
1

Heya - 我想從onPostExecute()中擴展AsyncTask的類中調用startActivity()。在實例方法內調用startActivity() - 導致一個空指針異常

這裏的流量:

類,它擴展的AsyncTask:

protected void onPostExecute() { 
    Login login = new Login(); 
    login.pushCreateNewOrChooseExistingFormActivity(); 
} 

類,它擴展活動:

public void pushCreateNewOrChooseExistingFormActivity() { 
    // start the CreateNewOrChooseExistingForm Activity 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    **ERROR_HERE*** intent.setClassName(this, CreateNewOrChooseExistingForm.class.getName()); 
    startActivity(intent); 
} 

而且我得到這個錯誤...每次:

03-17 16:04:29.579: ERROR/AndroidRuntime(1503): FATAL EXCEPTION: main 
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): java.lang.NullPointerException 
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120) 
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.ComponentName.(ComponentName.java:62) 
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.Intent.setClassName(Intent.java:4850) 
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at com.att.AppName.Login.pushCreateNewOrChooseExistingFormActivity(Login.java:47) 

對於iOS d evelopers - 我只是試圖推動一個新的視圖控制器到一個導航控制器的棧la pushViewController:animated:。這顯然 - 在這個平臺上很難做到。

任何想法?提前致謝!

更新 - 修正:

每@Falmarri建議,我設法解決這個問題。

首先,我不再調用Login login = new Login();來創建一個新的登錄對象。壞。壞。壞。沒有cookie。

而是準備打電話時.execute(),本教程(appfulcrum.com/?p=126),建議傳遞ApplicationContext來班上執行的AsyncTask,我的目的,如下圖所示:

CallWebServiceTask task = new CallWebServiceTask(); 
    // pass the login object to the task 
    task.applicationContext = login; 
    // execute the task in the background, passing the required params 
    task.execute(login); 

現在,在onPostExecute(),我可以讓我的登錄對象,像這樣的方法:

 ((Login) applicationContext).pushCreateNewOrChooseExistingFormActivity(); 
     ((Login) applicationContext).showLoginFailedAlert(result.get("httpResponseCode").toString()); 
     ... 

希望這可以幫助別人那裏!尤其是iOS開發transistioning到安卓...

+0

你是否在'AndroidManifest.xml'中聲明瞭你的活動? – Malcolm 2011-03-17 21:43:23

+0

Android!= iPhone請確保您已閱讀並理解Android基礎知識,並在其中解釋Android的主要部分(即活動)。沒有導航控制器或視圖控制器的概念。這並不意味着你想要做的事情很難,它與iPhone的方式截然不同。 http://developer.android.com/guide/topics/fundamentals.html – 2011-03-17 22:31:01

+0

@Malcolm,是: ... ... @Mayra,會做 - 回到繪圖板! – Cole 2011-03-18 15:31:27

回答

5

如果Login是擴展Activity一類,你應該永遠,永遠,永遠,要創建一個新的Login對象自己如

Login login = new Login(); 

這是非常,非常錯誤,你應該回去看看一些Android教程。

+0

注意事項。謝謝! – Cole 2011-03-18 15:31:59

+0

我正在學習本教程(減去我的好主意來創建一個新的Login對象 - 這就是我的Objective-C模式獲得的方式)。 http://appfulcrum.com/?p=126 你會介意解釋btnCallWebService.setOnClickListener()中的第13行正在做什麼?我會問那個帖子,但評論已關閉。 在此先感謝! – Cole 2011-03-18 15:47:50

+0

'Start.this'是對當前開始活動的引用。由於Activity擴展了Context,所以該行正在保存對android中大部分事物所需的活動上下文的引用。 – Falmarri 2011-03-18 19:12:43