嘿,我正在尝试从扩展 onPostExecute() 中的 AsyncTask 的类调用 startActivity()。
这是流程:
扩展 AsyncTask 的类:
protected void onPostExecute() {
Login login = new Login();
login.pushCreateNewOrChooseExistingFormActivity();
}
扩展 Activity 的类:
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 开发人员 - 我只是想将一个新的视图控制器推送到导航控制器的堆栈中pushViewController:animated:
。这显然 - 在这个平台上很难做到。
有任何想法吗?提前致谢!
更新 - 固定:
根据@Falmarri 的建议,我设法解决了这个问题。
首先,我不再调用Login login = new Login();
创建新的登录对象。坏的。坏的。坏的。没有饼干。
相反,在准备调用时.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 开发人员正在过渡到 Android...