2011-03-17 88 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